{
  "metadata": {
    "colab": {
      "provenance": [],
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3",
      "language": "python"
    },
    "language_info": {
      "name": "python",
      "version": "3.10.13",
      "mimetype": "text/x-python",
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "pygments_lexer": "ipython3",
      "nbconvert_exporter": "python",
      "file_extension": ".py"
    },
    "kaggle": {
      "accelerator": "none",
      "dataSources": [
        {
          "sourceId": 6613614,
          "sourceType": "datasetVersion",
          "datasetId": 3808038
        }
      ],
      "dockerImageVersionId": 30732,
      "isInternetEnabled": false,
      "language": "python",
      "sourceType": "notebook",
      "isGpuEnabled": false
    }
  },
  "nbformat_minor": 0,
  "nbformat": 4,
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/kimjaehwankimjaehwan/marketing/blob/main/customer_analytics_classification.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#63595C;\n",
        "           font-size:110%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: center\">\n",
        "\n",
        "<h1 style=\"padding: 20px;\n",
        "              color:#F0EDEE;\">\n",
        "              Table of Contents\n",
        "</h1>\n",
        "</div>\n",
        "\n",
        "1. [Importing Libraries](#libraries)\n",
        "2. [Loading Data](#loading)\n",
        "3. [Data Cleaning](#cleaning)\n",
        "4. [Preprocessing](#preprocessing)\n",
        "5. [Classification Modelings](#classification)\n",
        "    2. [Logistic Regression](#logistic_regression)\n",
        "    3. [SVC](#svc)\n",
        "    4. [Random Forest](#rf)\n",
        "    5. [XGBoost](#xgboost)"
      ],
      "metadata": {
        "id": "PLsD8kdCkwo3"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "qx3Vh3G5lDjZ",
        "outputId": "41da3502-ba4f-440c-ca5b-1dfcd6688a37"
      },
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Mounted at /content/drive\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#63595C;\n",
        "           font-size:110%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: center\">\n",
        "\n",
        "<h1 style=\"padding: 20px;\n",
        "              color:#F0EDEE;\">\n",
        "              1- Importing Libararies\n",
        "</h1>\n",
        "<a class=\"anchor\" id=\"libraries\"></a>\n",
        "</div>"
      ],
      "metadata": {
        "id": "I2NCv-Z9kwo4"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "import seaborn as sns\n",
        "import xgboost as xgb\n",
        "\n",
        "from sklearn.compose import ColumnTransformer\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.feature_selection import mutual_info_regression\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.metrics import (\n",
        "    classification_report,\n",
        "    confusion_matrix,\n",
        "    f1_score,\n",
        "    accuracy_score,\n",
        "    precision_score,\n",
        "    recall_score\n",
        ")\n",
        "from sklearn.model_selection import GridSearchCV, KFold, train_test_split\n",
        "from sklearn.pipeline import Pipeline\n",
        "from sklearn.preprocessing import StandardScaler, OneHotEncoder, MinMaxScaler, LabelEncoder\n",
        "\n",
        "from sklearn.svm import SVC\n",
        "\n",
        "from typing import Tuple"
      ],
      "metadata": {
        "id": "zqy2H1LYMqcy",
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:04.328607Z",
          "iopub.execute_input": "2024-06-26T05:50:04.329433Z",
          "iopub.status.idle": "2024-06-26T05:50:08.295894Z",
          "shell.execute_reply.started": "2024-06-26T05:50:04.329378Z",
          "shell.execute_reply": "2024-06-26T05:50:08.294512Z"
        },
        "trusted": true
      },
      "execution_count": 4,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# To ignore warinings\n",
        "import warnings\n",
        "warnings.filterwarnings('ignore')"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.297976Z",
          "iopub.execute_input": "2024-06-26T05:50:08.29854Z",
          "iopub.status.idle": "2024-06-26T05:50:08.304695Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.298504Z",
          "shell.execute_reply": "2024-06-26T05:50:08.302844Z"
        },
        "trusted": true,
        "id": "VDEkuCXdkwo7"
      },
      "execution_count": 5,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#63595C;\n",
        "           font-size:110%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: center\">\n",
        "\n",
        "<h1 style=\"padding: 20px;\n",
        "              color:#F0EDEE;\">\n",
        "              2- Loading Data\n",
        "</h1>\n",
        "<a class=\"anchor\" id=\"loading\"></a>\n",
        "</div>"
      ],
      "metadata": {
        "id": "ajiJEOaOkwo8"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "df = pd.read_csv('/content/drive/MyDrive/marketing/shopping_trends_updated.csv')\n",
        "df"
      ],
      "metadata": {
        "id": "Wo-GUwX8OQPf",
        "outputId": "a6e7a30b-43b3-4877-ed93-3eff008df344",
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.330679Z",
          "iopub.execute_input": "2024-06-26T05:50:08.331083Z",
          "iopub.status.idle": "2024-06-26T05:50:08.420558Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.331049Z",
          "shell.execute_reply": "2024-06-26T05:50:08.419316Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 582
        }
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "      Customer ID  Age  Gender Item Purchased     Category  \\\n",
              "0               1   55    Male         Blouse     Clothing   \n",
              "1               2   19    Male        Sweater     Clothing   \n",
              "2               3   50    Male          Jeans     Clothing   \n",
              "3               4   21    Male        Sandals     Footwear   \n",
              "4               5   45    Male         Blouse     Clothing   \n",
              "...           ...  ...     ...            ...          ...   \n",
              "3895         3896   40  Female         Hoodie     Clothing   \n",
              "3896         3897   52  Female       Backpack  Accessories   \n",
              "3897         3898   46  Female           Belt  Accessories   \n",
              "3898         3899   44  Female          Shoes     Footwear   \n",
              "3899         3900   52  Female        Handbag  Accessories   \n",
              "\n",
              "      Purchase Amount (USD)       Location Size      Color  Season  \\\n",
              "0                        53       Kentucky    L       Gray  Winter   \n",
              "1                        64          Maine    L     Maroon  Winter   \n",
              "2                        73  Massachusetts    S     Maroon  Spring   \n",
              "3                        90   Rhode Island    M     Maroon  Spring   \n",
              "4                        49         Oregon    M  Turquoise  Spring   \n",
              "...                     ...            ...  ...        ...     ...   \n",
              "3895                     28       Virginia    L  Turquoise  Summer   \n",
              "3896                     49           Iowa    L      White  Spring   \n",
              "3897                     33     New Jersey    L      Green  Spring   \n",
              "3898                     77      Minnesota    S      Brown  Summer   \n",
              "3899                     81     California    M      Beige  Spring   \n",
              "\n",
              "      Review Rating Subscription Status   Shipping Type Discount Applied  \\\n",
              "0               3.1                 Yes         Express              Yes   \n",
              "1               3.1                 Yes         Express              Yes   \n",
              "2               3.1                 Yes   Free Shipping              Yes   \n",
              "3               3.5                 Yes    Next Day Air              Yes   \n",
              "4               2.7                 Yes   Free Shipping              Yes   \n",
              "...             ...                 ...             ...              ...   \n",
              "3895            4.2                  No  2-Day Shipping               No   \n",
              "3896            4.5                  No    Store Pickup               No   \n",
              "3897            2.9                  No        Standard               No   \n",
              "3898            3.8                  No         Express               No   \n",
              "3899            3.1                  No    Store Pickup               No   \n",
              "\n",
              "     Promo Code Used  Previous Purchases Payment Method Frequency of Purchases  \n",
              "0                Yes                  14          Venmo            Fortnightly  \n",
              "1                Yes                   2           Cash            Fortnightly  \n",
              "2                Yes                  23    Credit Card                 Weekly  \n",
              "3                Yes                  49         PayPal                 Weekly  \n",
              "4                Yes                  31         PayPal               Annually  \n",
              "...              ...                 ...            ...                    ...  \n",
              "3895              No                  32          Venmo                 Weekly  \n",
              "3896              No                  41  Bank Transfer              Bi-Weekly  \n",
              "3897              No                  24          Venmo              Quarterly  \n",
              "3898              No                  24          Venmo                 Weekly  \n",
              "3899              No                  33          Venmo              Quarterly  \n",
              "\n",
              "[3900 rows x 18 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-771f6180-ecdf-4b3f-b4fb-3c9c9552e498\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Customer ID</th>\n",
              "      <th>Age</th>\n",
              "      <th>Gender</th>\n",
              "      <th>Item Purchased</th>\n",
              "      <th>Category</th>\n",
              "      <th>Purchase Amount (USD)</th>\n",
              "      <th>Location</th>\n",
              "      <th>Size</th>\n",
              "      <th>Color</th>\n",
              "      <th>Season</th>\n",
              "      <th>Review Rating</th>\n",
              "      <th>Subscription Status</th>\n",
              "      <th>Shipping Type</th>\n",
              "      <th>Discount Applied</th>\n",
              "      <th>Promo Code Used</th>\n",
              "      <th>Previous Purchases</th>\n",
              "      <th>Payment Method</th>\n",
              "      <th>Frequency of Purchases</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1</td>\n",
              "      <td>55</td>\n",
              "      <td>Male</td>\n",
              "      <td>Blouse</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>53</td>\n",
              "      <td>Kentucky</td>\n",
              "      <td>L</td>\n",
              "      <td>Gray</td>\n",
              "      <td>Winter</td>\n",
              "      <td>3.1</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Express</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>14</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Fortnightly</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>2</td>\n",
              "      <td>19</td>\n",
              "      <td>Male</td>\n",
              "      <td>Sweater</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>64</td>\n",
              "      <td>Maine</td>\n",
              "      <td>L</td>\n",
              "      <td>Maroon</td>\n",
              "      <td>Winter</td>\n",
              "      <td>3.1</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Express</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>2</td>\n",
              "      <td>Cash</td>\n",
              "      <td>Fortnightly</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>3</td>\n",
              "      <td>50</td>\n",
              "      <td>Male</td>\n",
              "      <td>Jeans</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>73</td>\n",
              "      <td>Massachusetts</td>\n",
              "      <td>S</td>\n",
              "      <td>Maroon</td>\n",
              "      <td>Spring</td>\n",
              "      <td>3.1</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Free Shipping</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>23</td>\n",
              "      <td>Credit Card</td>\n",
              "      <td>Weekly</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4</td>\n",
              "      <td>21</td>\n",
              "      <td>Male</td>\n",
              "      <td>Sandals</td>\n",
              "      <td>Footwear</td>\n",
              "      <td>90</td>\n",
              "      <td>Rhode Island</td>\n",
              "      <td>M</td>\n",
              "      <td>Maroon</td>\n",
              "      <td>Spring</td>\n",
              "      <td>3.5</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Next Day Air</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>49</td>\n",
              "      <td>PayPal</td>\n",
              "      <td>Weekly</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5</td>\n",
              "      <td>45</td>\n",
              "      <td>Male</td>\n",
              "      <td>Blouse</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>49</td>\n",
              "      <td>Oregon</td>\n",
              "      <td>M</td>\n",
              "      <td>Turquoise</td>\n",
              "      <td>Spring</td>\n",
              "      <td>2.7</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Free Shipping</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>31</td>\n",
              "      <td>PayPal</td>\n",
              "      <td>Annually</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3895</th>\n",
              "      <td>3896</td>\n",
              "      <td>40</td>\n",
              "      <td>Female</td>\n",
              "      <td>Hoodie</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>28</td>\n",
              "      <td>Virginia</td>\n",
              "      <td>L</td>\n",
              "      <td>Turquoise</td>\n",
              "      <td>Summer</td>\n",
              "      <td>4.2</td>\n",
              "      <td>No</td>\n",
              "      <td>2-Day Shipping</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>32</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Weekly</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3896</th>\n",
              "      <td>3897</td>\n",
              "      <td>52</td>\n",
              "      <td>Female</td>\n",
              "      <td>Backpack</td>\n",
              "      <td>Accessories</td>\n",
              "      <td>49</td>\n",
              "      <td>Iowa</td>\n",
              "      <td>L</td>\n",
              "      <td>White</td>\n",
              "      <td>Spring</td>\n",
              "      <td>4.5</td>\n",
              "      <td>No</td>\n",
              "      <td>Store Pickup</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>41</td>\n",
              "      <td>Bank Transfer</td>\n",
              "      <td>Bi-Weekly</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3897</th>\n",
              "      <td>3898</td>\n",
              "      <td>46</td>\n",
              "      <td>Female</td>\n",
              "      <td>Belt</td>\n",
              "      <td>Accessories</td>\n",
              "      <td>33</td>\n",
              "      <td>New Jersey</td>\n",
              "      <td>L</td>\n",
              "      <td>Green</td>\n",
              "      <td>Spring</td>\n",
              "      <td>2.9</td>\n",
              "      <td>No</td>\n",
              "      <td>Standard</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>24</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Quarterly</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3898</th>\n",
              "      <td>3899</td>\n",
              "      <td>44</td>\n",
              "      <td>Female</td>\n",
              "      <td>Shoes</td>\n",
              "      <td>Footwear</td>\n",
              "      <td>77</td>\n",
              "      <td>Minnesota</td>\n",
              "      <td>S</td>\n",
              "      <td>Brown</td>\n",
              "      <td>Summer</td>\n",
              "      <td>3.8</td>\n",
              "      <td>No</td>\n",
              "      <td>Express</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>24</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Weekly</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3899</th>\n",
              "      <td>3900</td>\n",
              "      <td>52</td>\n",
              "      <td>Female</td>\n",
              "      <td>Handbag</td>\n",
              "      <td>Accessories</td>\n",
              "      <td>81</td>\n",
              "      <td>California</td>\n",
              "      <td>M</td>\n",
              "      <td>Beige</td>\n",
              "      <td>Spring</td>\n",
              "      <td>3.1</td>\n",
              "      <td>No</td>\n",
              "      <td>Store Pickup</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>33</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Quarterly</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>3900 rows × 18 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-771f6180-ecdf-4b3f-b4fb-3c9c9552e498')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-771f6180-ecdf-4b3f-b4fb-3c9c9552e498 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-771f6180-ecdf-4b3f-b4fb-3c9c9552e498');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-8e14a455-66d6-453d-a7b2-fcf7427dec19\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-8e14a455-66d6-453d-a7b2-fcf7427dec19')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-8e14a455-66d6-453d-a7b2-fcf7427dec19 button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "  <div id=\"id_0a557283-a65f-4a61-bfec-9496600830df\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('df')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_0a557283-a65f-4a61-bfec-9496600830df button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('df');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df",
              "summary": "{\n  \"name\": \"df\",\n  \"rows\": 3900,\n  \"fields\": [\n    {\n      \"column\": \"Customer ID\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1125,\n        \"min\": 1,\n        \"max\": 3900,\n        \"num_unique_values\": 3900,\n        \"samples\": [\n          840,\n          1718,\n          322\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Age\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 15,\n        \"min\": 18,\n        \"max\": 70,\n        \"num_unique_values\": 53,\n        \"samples\": [\n          56,\n          24,\n          51\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Gender\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"Female\",\n          \"Male\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Item Purchased\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 25,\n        \"samples\": [\n          \"Handbag\",\n          \"Jewelry\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Category\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"Footwear\",\n          \"Accessories\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Purchase Amount (USD)\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 23,\n        \"min\": 20,\n        \"max\": 100,\n        \"num_unique_values\": 81,\n        \"samples\": [\n          60,\n          53\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Location\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 50,\n        \"samples\": [\n          \"New Hampshire\",\n          \"Connecticut\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Size\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"S\",\n          \"XL\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Color\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 25,\n        \"samples\": [\n          \"Olive\",\n          \"Red\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Season\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"Spring\",\n          \"Fall\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Review Rating\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.7162228139312417,\n        \"min\": 2.5,\n        \"max\": 5.0,\n        \"num_unique_values\": 26,\n        \"samples\": [\n          4.9,\n          5.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Subscription Status\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"No\",\n          \"Yes\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Shipping Type\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Express\",\n          \"Free Shipping\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Discount Applied\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"No\",\n          \"Yes\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Promo Code Used\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"No\",\n          \"Yes\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Previous Purchases\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 14,\n        \"min\": 1,\n        \"max\": 50,\n        \"num_unique_values\": 50,\n        \"samples\": [\n          36,\n          47\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Payment Method\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Venmo\",\n          \"Cash\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Frequency of Purchases\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 7,\n        \"samples\": [\n          \"Fortnightly\",\n          \"Weekly\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "df.duplicated().any()"
      ],
      "metadata": {
        "id": "Ge3PIzYgvWhD",
        "outputId": "46b2ec41-2ea2-4d51-f90c-ec8265388b61",
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.422056Z",
          "iopub.execute_input": "2024-06-26T05:50:08.422634Z",
          "iopub.status.idle": "2024-06-26T05:50:08.450516Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.42259Z",
          "shell.execute_reply": "2024-06-26T05:50:08.449226Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "False"
            ]
          },
          "metadata": {},
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "df.isnull().sum()"
      ],
      "metadata": {
        "id": "_E-thlPzCcMz",
        "outputId": "f36c2b00-90a1-4e00-e1b4-a9c765e0eb1d",
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.452022Z",
          "iopub.execute_input": "2024-06-26T05:50:08.452445Z",
          "iopub.status.idle": "2024-06-26T05:50:08.470374Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.452411Z",
          "shell.execute_reply": "2024-06-26T05:50:08.469208Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 648
        }
      },
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Customer ID               0\n",
              "Age                       0\n",
              "Gender                    0\n",
              "Item Purchased            0\n",
              "Category                  0\n",
              "Purchase Amount (USD)     0\n",
              "Location                  0\n",
              "Size                      0\n",
              "Color                     0\n",
              "Season                    0\n",
              "Review Rating             0\n",
              "Subscription Status       0\n",
              "Shipping Type             0\n",
              "Discount Applied          0\n",
              "Promo Code Used           0\n",
              "Previous Purchases        0\n",
              "Payment Method            0\n",
              "Frequency of Purchases    0\n",
              "dtype: int64"
            ],
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>0</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>Customer ID</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Age</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Gender</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Item Purchased</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Category</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Purchase Amount (USD)</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Location</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Size</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Color</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Season</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Review Rating</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Subscription Status</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Shipping Type</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Discount Applied</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Promo Code Used</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Previous Purchases</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Payment Method</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Frequency of Purchases</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div><br><label><b>dtype:</b> int64</label>"
            ]
          },
          "metadata": {},
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "for col in df.columns:\n",
        "  if df[col].dtype == object:\n",
        "    print(df[col].value_counts())\n",
        "    print('**********************')"
      ],
      "metadata": {
        "id": "bcN9k_A7C4Wr",
        "outputId": "3e421182-28ed-4669-dcbc-6c1035cb34bd",
        "_kg_hide-output": true,
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.473012Z",
          "iopub.execute_input": "2024-06-26T05:50:08.473484Z",
          "iopub.status.idle": "2024-06-26T05:50:08.503886Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.473441Z",
          "shell.execute_reply": "2024-06-26T05:50:08.50263Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Gender\n",
            "Male      2652\n",
            "Female    1248\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Item Purchased\n",
            "Blouse        171\n",
            "Jewelry       171\n",
            "Pants         171\n",
            "Shirt         169\n",
            "Dress         166\n",
            "Sweater       164\n",
            "Jacket        163\n",
            "Belt          161\n",
            "Sunglasses    161\n",
            "Coat          161\n",
            "Sandals       160\n",
            "Socks         159\n",
            "Skirt         158\n",
            "Shorts        157\n",
            "Scarf         157\n",
            "Hat           154\n",
            "Handbag       153\n",
            "Hoodie        151\n",
            "Shoes         150\n",
            "T-shirt       147\n",
            "Sneakers      145\n",
            "Boots         144\n",
            "Backpack      143\n",
            "Gloves        140\n",
            "Jeans         124\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Category\n",
            "Clothing       1737\n",
            "Accessories    1240\n",
            "Footwear        599\n",
            "Outerwear       324\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Location\n",
            "Montana           96\n",
            "California        95\n",
            "Idaho             93\n",
            "Illinois          92\n",
            "Alabama           89\n",
            "Minnesota         88\n",
            "Nebraska          87\n",
            "New York          87\n",
            "Nevada            87\n",
            "Maryland          86\n",
            "Delaware          86\n",
            "Vermont           85\n",
            "Louisiana         84\n",
            "North Dakota      83\n",
            "Missouri          81\n",
            "West Virginia     81\n",
            "New Mexico        81\n",
            "Mississippi       80\n",
            "Indiana           79\n",
            "Georgia           79\n",
            "Kentucky          79\n",
            "Arkansas          79\n",
            "North Carolina    78\n",
            "Connecticut       78\n",
            "Virginia          77\n",
            "Ohio              77\n",
            "Tennessee         77\n",
            "Texas             77\n",
            "Maine             77\n",
            "South Carolina    76\n",
            "Colorado          75\n",
            "Oklahoma          75\n",
            "Wisconsin         75\n",
            "Oregon            74\n",
            "Pennsylvania      74\n",
            "Washington        73\n",
            "Michigan          73\n",
            "Alaska            72\n",
            "Massachusetts     72\n",
            "Wyoming           71\n",
            "Utah              71\n",
            "New Hampshire     71\n",
            "South Dakota      70\n",
            "Iowa              69\n",
            "Florida           68\n",
            "New Jersey        67\n",
            "Hawaii            65\n",
            "Arizona           65\n",
            "Kansas            63\n",
            "Rhode Island      63\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Size\n",
            "M     1755\n",
            "L     1053\n",
            "S      663\n",
            "XL     429\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Color\n",
            "Olive        177\n",
            "Yellow       174\n",
            "Silver       173\n",
            "Teal         172\n",
            "Green        169\n",
            "Black        167\n",
            "Cyan         166\n",
            "Violet       166\n",
            "Gray         159\n",
            "Maroon       158\n",
            "Orange       154\n",
            "Charcoal     153\n",
            "Pink         153\n",
            "Magenta      152\n",
            "Blue         152\n",
            "Purple       151\n",
            "Peach        149\n",
            "Red          148\n",
            "Beige        147\n",
            "Indigo       147\n",
            "Lavender     147\n",
            "Turquoise    145\n",
            "White        142\n",
            "Brown        141\n",
            "Gold         138\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Season\n",
            "Spring    999\n",
            "Fall      975\n",
            "Winter    971\n",
            "Summer    955\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Subscription Status\n",
            "No     2847\n",
            "Yes    1053\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Shipping Type\n",
            "Free Shipping     675\n",
            "Standard          654\n",
            "Store Pickup      650\n",
            "Next Day Air      648\n",
            "Express           646\n",
            "2-Day Shipping    627\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Discount Applied\n",
            "No     2223\n",
            "Yes    1677\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Promo Code Used\n",
            "No     2223\n",
            "Yes    1677\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Payment Method\n",
            "PayPal           677\n",
            "Credit Card      671\n",
            "Cash             670\n",
            "Debit Card       636\n",
            "Venmo            634\n",
            "Bank Transfer    612\n",
            "Name: count, dtype: int64\n",
            "**********************\n",
            "Frequency of Purchases\n",
            "Every 3 Months    584\n",
            "Annually          572\n",
            "Quarterly         563\n",
            "Monthly           553\n",
            "Bi-Weekly         547\n",
            "Fortnightly       542\n",
            "Weekly            539\n",
            "Name: count, dtype: int64\n",
            "**********************\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "df['Customer ID'].value_counts()"
      ],
      "metadata": {
        "id": "GOfafOEPFK0p",
        "outputId": "ab641dcc-a858-4e40-f5cd-7dc3bf141fc0",
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.505454Z",
          "iopub.execute_input": "2024-06-26T05:50:08.50585Z",
          "iopub.status.idle": "2024-06-26T05:50:08.520723Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.505814Z",
          "shell.execute_reply": "2024-06-26T05:50:08.519216Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 489
        }
      },
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Customer ID\n",
              "1       1\n",
              "2621    1\n",
              "2593    1\n",
              "2594    1\n",
              "2595    1\n",
              "       ..\n",
              "1305    1\n",
              "1306    1\n",
              "1307    1\n",
              "1308    1\n",
              "3900    1\n",
              "Name: count, Length: 3900, dtype: int64"
            ],
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>count</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Customer ID</th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2621</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2593</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2594</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2595</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1305</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1306</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1307</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1308</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3900</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>3900 rows × 1 columns</p>\n",
              "</div><br><label><b>dtype:</b> int64</label>"
            ]
          },
          "metadata": {},
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Color palette used for designing markdowns and the plots in this notebook\n",
        "\n",
        "colors=['#F5E3E0', '#E8B4BC', '#D282A6', '#6E4555', '#3A3238', '#63595C', '#F0EDEE']"
      ],
      "metadata": {
        "id": "Z_AsZSaULUuk",
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.522449Z",
          "iopub.execute_input": "2024-06-26T05:50:08.523109Z",
          "iopub.status.idle": "2024-06-26T05:50:08.530946Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.523066Z",
          "shell.execute_reply": "2024-06-26T05:50:08.529712Z"
        },
        "trusted": true
      },
      "execution_count": 11,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#63595C;\n",
        "           font-size:110%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: center\">\n",
        "\n",
        "<h1 style=\"padding: 20px;\n",
        "              color:#F0EDEE;\">\n",
        "              3- Data Cleaning\n",
        "</h1>\n",
        "<a class=\"anchor\" id=\"cleaning\"></a>\n",
        "</div>"
      ],
      "metadata": {
        "id": "QsUrDsQSkwpD"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "sns.histplot(df['Purchase Amount (USD)'], color='#6E4555')\n",
        "plt.show()"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.536336Z",
          "iopub.execute_input": "2024-06-26T05:50:08.536758Z",
          "iopub.status.idle": "2024-06-26T05:50:08.896106Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.536723Z",
          "shell.execute_reply": "2024-06-26T05:50:08.894768Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 449
        },
        "id": "ThfJIR7ekwpD",
        "outputId": "68a6d5a3-5c79-4ad8-b526-5791ecab428f"
      },
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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vLxL3nJ+gb+/v7799tvrLupy/vvf/+rEiROKjo6WJDkcDhUUFLgFrLVr16q8vFxdunSptDoAAED1cU1h56abbtLu3bsv275z505XELkaxcXFys7OVnZ2tiTpyJEjys7OVk5OjoqLi/Xkk09q06ZN+uqrr5Senq7+/furWbNmSk5OlvS/i6J79eqlRx55RFu2bNGnn36q0aNHa9CgQZe9EwsAANxYrins9OnTR5MnT9bZs2cvajtz5oymTp2qX/ziF1e9vm3btqlDhw6uF4hOmDBBHTp00JQpU1SjRg3t3LlTv/zlL9W8eXONGDFCHTt21CeffOJ2vc2CBQuUkJCgHj16qE+fPrrtttv01ltvXcuwAACAhV3TBcrPPvuslixZoubNm2v06NFq0aKFJGn//v1KS0tTWVmZnnnmmate35133iljzGXbV61adcV1REREaOHChVe9TQAAcGO5prATFRWlzz77TKNGjdKkSZNcQcVmsyk5OVlpaWmKioqqlEIBAAAq4pofKhgfH68VK1bou+++06FDh2SM0c0336y6detWRn0AAADXpUJPUJakunXrqnPnzp6sBQAAwOMq9CJQAACA6oKwAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALM2rYWfDhg3q16+fYmJiZLPZtGzZMrd2Y4ymTJmi6OhoBQcHKykpSQcPHnTrc/LkSQ0ZMkShoaEKDw/XiBEjVFxcXIWjAAAAvsyrYef06dNq166d0tLSLtn+4osv6tVXX9Wbb76pzZs3q3bt2kpOTtbZs2ddfYYMGaI9e/Zo9erVWr58uTZs2KCRI0dW1RAAAICP8/fmxnv37q3evXtfss0Yo1deeUXPPvus+vfvL0l69913FRUVpWXLlmnQoEHat2+fVq5c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/ve/lyR16NBBu3fv1ptvvqmUlBQvV+dZc+fOVe/evRUTE+PtUjzqH//4hxYsWKCFCxeqVatWys7O1rhx4xQTE2OZffjee+/poYce0k033aQaNWrolltu0eDBg5WVleXt0iyP01geMnr0aC1fvlzr1q1Tw4YNXcvtdrtKS0tVUFDg1j8vL092u72Kq6y4wMBANWvWTB07dtSsWbPUrl07/fnPf7bE+LKyspSfn69bbrlF/v7+8vf3V0ZGhl599VX5+/srKiqq2o/xx8LDw9W8eXMdOnTIEvswOjpaiYmJbstatmzpOlV3YRw/vkOpOo1Rkr7++mutWbNGDz/8sGuZFfafJD355JN6+umnNWjQILVp00bDhg3T+PHjNWvWLEnW2IdNmzZVRkaGiouLdfToUW3ZskXnzp1TkyZNLDG+C65mLHa7Xfn5+W7t58+f18mTJytlvISd62SM0ejRo7V06VKtXbtWjRs3dmvv2LGjAgIClJ6e7lp24MAB5eTkyOFwVHW5HlNeXq6SkhJLjK9Hjx7atWuXsrOzXVOnTp00ZMgQ15+r+xh/rLi4WIcPH1Z0dLQl9mG3bt0ueuTDF198ofj4eElS48aNZbfb3cZYVFSkzZs3V5sxStK8efMUGRmpvn37upZZYf9J0vfffy8/P/efpBo1aqi8vFySdfahJNWuXVvR0dH67rvvtGrVKvXv399S47uasTgcDhUUFLgd1Vq7dq3Ky8vVpUsXzxfl8UuebzCjRo0yYWFhZv369W63hn7//feuPo8++qiJi4sza9euNdu2bTMOh8M4HA4vVn1tnn76aZORkWGOHDlidu7caZ5++mljs9nMxx9/bIyp/uO7lB/ejWVM9R/j448/btavX2+OHDliPv30U5OUlGTq169v8vPzjTHVf3xbtmwx/v7+ZubMmebgwYNmwYIFplatWub999939XnhhRdMeHi4+de//mV27txp+vfv77O39V5KWVmZiYuLMxMnTryorbrvP2OMSUlJMTfddJPr1vMlS5aY+vXrm6eeesrVp7rvw5UrV5r//Oc/5ssvvzQff/yxadeunenSpYspLS01xlSv8Z06dcps377dbN++3UgyL7/8stm+fbv5+uuvjTFXN5ZevXqZDh06mM2bN5uNGzeam2++mVvPfZWkS07z5s1z9Tlz5oz57W9/a+rWrWtq1aplfvWr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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "One of the targets we can consider for this dataset is purchased amount. The above histogram shows us that we can split the whole interval from 20 to 100$ to 2 intervals in which the data is distributed almost uniformly."
      ],
      "metadata": {
        "id": "iY2xPsabkwpE"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "def get_customer_type(x: int):\n",
        "    \"\"\"Splits cusomers into 2 groups based on the purchased amount in USD\"\"\"\n",
        "    if x <= 60:\n",
        "        return 'low'\n",
        "    else:\n",
        "        return 'high'\n",
        "\n",
        "df['Customer purchased amount'] = df['Purchase Amount (USD)'].apply(get_customer_type)\n",
        "\n",
        "df"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.897855Z",
          "iopub.execute_input": "2024-06-26T05:50:08.898339Z",
          "iopub.status.idle": "2024-06-26T05:50:08.939877Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.898297Z",
          "shell.execute_reply": "2024-06-26T05:50:08.938667Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 582
        },
        "id": "JMkEAsTOkwpE",
        "outputId": "94376f93-e344-4717-9d1c-505b96c91e57"
      },
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "      Customer ID  Age  Gender Item Purchased     Category  \\\n",
              "0               1   55    Male         Blouse     Clothing   \n",
              "1               2   19    Male        Sweater     Clothing   \n",
              "2               3   50    Male          Jeans     Clothing   \n",
              "3               4   21    Male        Sandals     Footwear   \n",
              "4               5   45    Male         Blouse     Clothing   \n",
              "...           ...  ...     ...            ...          ...   \n",
              "3895         3896   40  Female         Hoodie     Clothing   \n",
              "3896         3897   52  Female       Backpack  Accessories   \n",
              "3897         3898   46  Female           Belt  Accessories   \n",
              "3898         3899   44  Female          Shoes     Footwear   \n",
              "3899         3900   52  Female        Handbag  Accessories   \n",
              "\n",
              "      Purchase Amount (USD)       Location Size      Color  Season  \\\n",
              "0                        53       Kentucky    L       Gray  Winter   \n",
              "1                        64          Maine    L     Maroon  Winter   \n",
              "2                        73  Massachusetts    S     Maroon  Spring   \n",
              "3                        90   Rhode Island    M     Maroon  Spring   \n",
              "4                        49         Oregon    M  Turquoise  Spring   \n",
              "...                     ...            ...  ...        ...     ...   \n",
              "3895                     28       Virginia    L  Turquoise  Summer   \n",
              "3896                     49           Iowa    L      White  Spring   \n",
              "3897                     33     New Jersey    L      Green  Spring   \n",
              "3898                     77      Minnesota    S      Brown  Summer   \n",
              "3899                     81     California    M      Beige  Spring   \n",
              "\n",
              "      Review Rating Subscription Status   Shipping Type Discount Applied  \\\n",
              "0               3.1                 Yes         Express              Yes   \n",
              "1               3.1                 Yes         Express              Yes   \n",
              "2               3.1                 Yes   Free Shipping              Yes   \n",
              "3               3.5                 Yes    Next Day Air              Yes   \n",
              "4               2.7                 Yes   Free Shipping              Yes   \n",
              "...             ...                 ...             ...              ...   \n",
              "3895            4.2                  No  2-Day Shipping               No   \n",
              "3896            4.5                  No    Store Pickup               No   \n",
              "3897            2.9                  No        Standard               No   \n",
              "3898            3.8                  No         Express               No   \n",
              "3899            3.1                  No    Store Pickup               No   \n",
              "\n",
              "     Promo Code Used  Previous Purchases Payment Method  \\\n",
              "0                Yes                  14          Venmo   \n",
              "1                Yes                   2           Cash   \n",
              "2                Yes                  23    Credit Card   \n",
              "3                Yes                  49         PayPal   \n",
              "4                Yes                  31         PayPal   \n",
              "...              ...                 ...            ...   \n",
              "3895              No                  32          Venmo   \n",
              "3896              No                  41  Bank Transfer   \n",
              "3897              No                  24          Venmo   \n",
              "3898              No                  24          Venmo   \n",
              "3899              No                  33          Venmo   \n",
              "\n",
              "     Frequency of Purchases Customer purchased amount  \n",
              "0               Fortnightly                       low  \n",
              "1               Fortnightly                      high  \n",
              "2                    Weekly                      high  \n",
              "3                    Weekly                      high  \n",
              "4                  Annually                       low  \n",
              "...                     ...                       ...  \n",
              "3895                 Weekly                       low  \n",
              "3896              Bi-Weekly                       low  \n",
              "3897              Quarterly                       low  \n",
              "3898                 Weekly                      high  \n",
              "3899              Quarterly                      high  \n",
              "\n",
              "[3900 rows x 19 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-be3fe5ca-80c2-462b-96c0-cd50693a8919\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Customer ID</th>\n",
              "      <th>Age</th>\n",
              "      <th>Gender</th>\n",
              "      <th>Item Purchased</th>\n",
              "      <th>Category</th>\n",
              "      <th>Purchase Amount (USD)</th>\n",
              "      <th>Location</th>\n",
              "      <th>Size</th>\n",
              "      <th>Color</th>\n",
              "      <th>Season</th>\n",
              "      <th>Review Rating</th>\n",
              "      <th>Subscription Status</th>\n",
              "      <th>Shipping Type</th>\n",
              "      <th>Discount Applied</th>\n",
              "      <th>Promo Code Used</th>\n",
              "      <th>Previous Purchases</th>\n",
              "      <th>Payment Method</th>\n",
              "      <th>Frequency of Purchases</th>\n",
              "      <th>Customer purchased amount</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1</td>\n",
              "      <td>55</td>\n",
              "      <td>Male</td>\n",
              "      <td>Blouse</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>53</td>\n",
              "      <td>Kentucky</td>\n",
              "      <td>L</td>\n",
              "      <td>Gray</td>\n",
              "      <td>Winter</td>\n",
              "      <td>3.1</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Express</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>14</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Fortnightly</td>\n",
              "      <td>low</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>2</td>\n",
              "      <td>19</td>\n",
              "      <td>Male</td>\n",
              "      <td>Sweater</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>64</td>\n",
              "      <td>Maine</td>\n",
              "      <td>L</td>\n",
              "      <td>Maroon</td>\n",
              "      <td>Winter</td>\n",
              "      <td>3.1</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Express</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>2</td>\n",
              "      <td>Cash</td>\n",
              "      <td>Fortnightly</td>\n",
              "      <td>high</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>3</td>\n",
              "      <td>50</td>\n",
              "      <td>Male</td>\n",
              "      <td>Jeans</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>73</td>\n",
              "      <td>Massachusetts</td>\n",
              "      <td>S</td>\n",
              "      <td>Maroon</td>\n",
              "      <td>Spring</td>\n",
              "      <td>3.1</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Free Shipping</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>23</td>\n",
              "      <td>Credit Card</td>\n",
              "      <td>Weekly</td>\n",
              "      <td>high</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4</td>\n",
              "      <td>21</td>\n",
              "      <td>Male</td>\n",
              "      <td>Sandals</td>\n",
              "      <td>Footwear</td>\n",
              "      <td>90</td>\n",
              "      <td>Rhode Island</td>\n",
              "      <td>M</td>\n",
              "      <td>Maroon</td>\n",
              "      <td>Spring</td>\n",
              "      <td>3.5</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Next Day Air</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>49</td>\n",
              "      <td>PayPal</td>\n",
              "      <td>Weekly</td>\n",
              "      <td>high</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5</td>\n",
              "      <td>45</td>\n",
              "      <td>Male</td>\n",
              "      <td>Blouse</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>49</td>\n",
              "      <td>Oregon</td>\n",
              "      <td>M</td>\n",
              "      <td>Turquoise</td>\n",
              "      <td>Spring</td>\n",
              "      <td>2.7</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Free Shipping</td>\n",
              "      <td>Yes</td>\n",
              "      <td>Yes</td>\n",
              "      <td>31</td>\n",
              "      <td>PayPal</td>\n",
              "      <td>Annually</td>\n",
              "      <td>low</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3895</th>\n",
              "      <td>3896</td>\n",
              "      <td>40</td>\n",
              "      <td>Female</td>\n",
              "      <td>Hoodie</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>28</td>\n",
              "      <td>Virginia</td>\n",
              "      <td>L</td>\n",
              "      <td>Turquoise</td>\n",
              "      <td>Summer</td>\n",
              "      <td>4.2</td>\n",
              "      <td>No</td>\n",
              "      <td>2-Day Shipping</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>32</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Weekly</td>\n",
              "      <td>low</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3896</th>\n",
              "      <td>3897</td>\n",
              "      <td>52</td>\n",
              "      <td>Female</td>\n",
              "      <td>Backpack</td>\n",
              "      <td>Accessories</td>\n",
              "      <td>49</td>\n",
              "      <td>Iowa</td>\n",
              "      <td>L</td>\n",
              "      <td>White</td>\n",
              "      <td>Spring</td>\n",
              "      <td>4.5</td>\n",
              "      <td>No</td>\n",
              "      <td>Store Pickup</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>41</td>\n",
              "      <td>Bank Transfer</td>\n",
              "      <td>Bi-Weekly</td>\n",
              "      <td>low</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3897</th>\n",
              "      <td>3898</td>\n",
              "      <td>46</td>\n",
              "      <td>Female</td>\n",
              "      <td>Belt</td>\n",
              "      <td>Accessories</td>\n",
              "      <td>33</td>\n",
              "      <td>New Jersey</td>\n",
              "      <td>L</td>\n",
              "      <td>Green</td>\n",
              "      <td>Spring</td>\n",
              "      <td>2.9</td>\n",
              "      <td>No</td>\n",
              "      <td>Standard</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>24</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Quarterly</td>\n",
              "      <td>low</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3898</th>\n",
              "      <td>3899</td>\n",
              "      <td>44</td>\n",
              "      <td>Female</td>\n",
              "      <td>Shoes</td>\n",
              "      <td>Footwear</td>\n",
              "      <td>77</td>\n",
              "      <td>Minnesota</td>\n",
              "      <td>S</td>\n",
              "      <td>Brown</td>\n",
              "      <td>Summer</td>\n",
              "      <td>3.8</td>\n",
              "      <td>No</td>\n",
              "      <td>Express</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>24</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Weekly</td>\n",
              "      <td>high</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3899</th>\n",
              "      <td>3900</td>\n",
              "      <td>52</td>\n",
              "      <td>Female</td>\n",
              "      <td>Handbag</td>\n",
              "      <td>Accessories</td>\n",
              "      <td>81</td>\n",
              "      <td>California</td>\n",
              "      <td>M</td>\n",
              "      <td>Beige</td>\n",
              "      <td>Spring</td>\n",
              "      <td>3.1</td>\n",
              "      <td>No</td>\n",
              "      <td>Store Pickup</td>\n",
              "      <td>No</td>\n",
              "      <td>No</td>\n",
              "      <td>33</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Quarterly</td>\n",
              "      <td>high</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>3900 rows × 19 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-be3fe5ca-80c2-462b-96c0-cd50693a8919')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-be3fe5ca-80c2-462b-96c0-cd50693a8919 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-be3fe5ca-80c2-462b-96c0-cd50693a8919');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-279cf051-82a1-459b-a837-681c79de4473\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-279cf051-82a1-459b-a837-681c79de4473')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-279cf051-82a1-459b-a837-681c79de4473 button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "  <div id=\"id_a42bcf2d-d671-4961-b957-d620437eb51a\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('df')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_a42bcf2d-d671-4961-b957-d620437eb51a button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('df');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df",
              "summary": "{\n  \"name\": \"df\",\n  \"rows\": 3900,\n  \"fields\": [\n    {\n      \"column\": \"Customer ID\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1125,\n        \"min\": 1,\n        \"max\": 3900,\n        \"num_unique_values\": 3900,\n        \"samples\": [\n          840,\n          1718,\n          322\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Age\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 15,\n        \"min\": 18,\n        \"max\": 70,\n        \"num_unique_values\": 53,\n        \"samples\": [\n          56,\n          24,\n          51\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Gender\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"Female\",\n          \"Male\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Item Purchased\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 25,\n        \"samples\": [\n          \"Handbag\",\n          \"Jewelry\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Category\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"Footwear\",\n          \"Accessories\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Purchase Amount (USD)\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 23,\n        \"min\": 20,\n        \"max\": 100,\n        \"num_unique_values\": 81,\n        \"samples\": [\n          60,\n          53\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Location\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 50,\n        \"samples\": [\n          \"New Hampshire\",\n          \"Connecticut\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Size\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"S\",\n          \"XL\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Color\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 25,\n        \"samples\": [\n          \"Olive\",\n          \"Red\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Season\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"Spring\",\n          \"Fall\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Review Rating\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.7162228139312417,\n        \"min\": 2.5,\n        \"max\": 5.0,\n        \"num_unique_values\": 26,\n        \"samples\": [\n          4.9,\n          5.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Subscription Status\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"No\",\n          \"Yes\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Shipping Type\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Express\",\n          \"Free Shipping\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Discount Applied\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"No\",\n          \"Yes\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Promo Code Used\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"No\",\n          \"Yes\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Previous Purchases\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 14,\n        \"min\": 1,\n        \"max\": 50,\n        \"num_unique_values\": 50,\n        \"samples\": [\n          36,\n          47\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Payment Method\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Venmo\",\n          \"Cash\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Frequency of Purchases\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 7,\n        \"samples\": [\n          \"Fortnightly\",\n          \"Weekly\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Customer purchased amount\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"high\",\n          \"low\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 13
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "sns.countplot(data=df, x='Customer purchased amount', palette=colors)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 466
        },
        "id": "3E7tfXjSkwpE",
        "outputId": "76a4148e-22cd-42f7-ac5c-d63abf4a9eea"
      },
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<Axes: xlabel='Customer purchased amount', ylabel='count'>"
            ]
          },
          "metadata": {},
          "execution_count": 14
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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o5k/Tz58+HANHz78Z/ujo6N9jt99910NHjxYnTp18mkPCwurNbZGdna2jh49qnnz5ikoKEg9evRQUVGRZs+erUmTJp38IgAAQKPXaPYQlZWVacmSJZowYUKtvkceeUStW7dW79699eijj6qqqsrqKywsVHJysoKCgqy2lJQUFRcXa9++fXWeq6KiQl6v1+cBAADOXH69QnQiXn75ZYWFhemqq67yab/zzjv1m9/8RhEREVq5cqUyMjJUWlqq2bNnS5I8Ho86duzo85yoqCirr1WrVrXOlZWVpQceeKCBVgIAAAJNowlE8+bN05gxYxQcHOzTnpaWZv3cs2dPBQUF6dZbb1VWVpacTme9zpWRkeEzr9frldvtrl/hAAAg4DWKQPTxxx+ruLhYr7/++q+O7d+/v6qqqrRjxw7FxcUpOjpaZWVlPmNqjn9u35HT6ax3mAIAAI1Po9hD9NJLL6lPnz7q1avXr44tKipSkyZNFBkZKUlKSkpSQUGBKisrrTE5OTmKi4ur83YZAACwH78GooMHD6qoqEhFRUWSpJKSEhUVFWnnzp3WGK/XqzfffFN/+MMfaj2/sLBQc+bM0eeff66vvvpK2dnZmjp1qm688UYr7Nxwww0KCgrShAkTtHHjRr3++ut68sknfW6JAQAAe/PrLbPPPvtMgwcPto5rQsq4ceO0YMECSdJrr70mY4yuv/76Ws93Op167bXXlJmZqYqKCnXs2FFTp071CTsul0vLli1Tamqq+vTpozZt2mjGjBm85R4AAFgcxhjj7yICndfrlcvlUnl5ucLDwxvsPAd2fdtgcwONWVhsO3+XcNK+yS3wdwlAQHIPSW6wuU/k9btR7CECAABoSAQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABge34NRAUFBRo5cqRiY2PlcDi0aNEin/6bb75ZDofD5zFs2DCfMd99953GjBmj8PBwtWzZUhMmTNDBgwd9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ScHBwZKkMWPGqLS0VDk5OaqsrNQtt9yiSZMmaeHChZJ++JTKoUOHasiQIXruuee0YcMGjR8/Xi1bttSkSZNOyToAAEDjVq+v7qixZ88eFRcXS5Li4uLUtm3b+hficOidd97RlVdeKemHq0OxsbG6++67dc8990iSysvLFRUVpQULFui6667T5s2bFR8frzVr1qhv376SpKVLl+ryyy/Xt99+q9jYWM2dO1d//vOf5fF4FBQUJEn605/+pEWLFmnLli111lJRUaGKigrr2Ov1yu1289UdgJ/w1R3AmStQvrqjXrfMDh06pPHjxysmJkbJyclKTk5WbGysJkyYoMOHD9er6J8qKSmRx+PRkCFDrDaXy6X+/fursLBQklRYWKiWLVtaYUiShgwZoiZNmmjVqlXWmOTkZCsMSVJKSoqKi4trfZ5SjaysLLlcLuvhdrtPyZoAAEBgqlcgSktLU35+vt5//33t379f+/fv17vvvqv8/Hzdfffdp6Qwj8cjSYqKivJpj4qKsvo8Ho8iIyN9+ps1a6aIiAifMXXN8eNz/FRGRobKy8utxzfffHPyCwIAAAGrXnuI3nrrLf3zn//UoEGDrLbLL79cISEhuvbaazV37txTVZ9fOJ1OOZ1Of5cBAABOk3pdITp8+HCtqy6SFBkZecpumUVHR0uSysrKfNrLysqsvujoaO3evdunv6qqSt99953PmLrm+PE5AACAvdUrECUlJen+++/XkSNHrLbvv/9eDzzwgJKSkk5JYR07dlR0dLSWL19utXm9Xq1atco6R1JSkvbv36+1a9daYz788ENVV1erf//+1piCggJVVlZaY3JychQXF6dWrVqdkloBAEDjVq9bZnPmzNGwYcPUrl079erVS5L0+eefy+l0atmyZcc9z8GDB7Vt2zbruKSkREVFRYqIiNA555yju+66S3/5y1/UtWtX6233sbGx1jvRunfvrmHDhmnixIl67rnnVFlZqSlTpui6665TbGysJOmGG27QAw88oAkTJig9PV1ffPGFnnzySb5iBAAAWOoViBISErR161ZlZ2dbb12//vrrNWbMGIWEhBz3PJ999pkGDx5sHdd8Ava4ceO0YMEC3XvvvTp06JAmTZqk/fv36+KLL9bSpUutzyCSpOzsbE2ZMkWXXnqpmjRpotGjR+tvf/ub1e9yubRs2TKlpqaqT58+atOmjWbMmMFnEAEAAEu9PocoKytLUVFRGj9+vE/7vHnztGfPHqWnp5+yAgPBiXyOwcngc4iAuvE5RMCZq1F/DtHzzz+vbt261Wrv0aOHnnvuufpMCQAA4Df1CkQej0cxMTG12tu2bavS0tKTLgoAAOB0qlcgcrvdWrFiRa32FStWWJuZAQAAGot6baqeOHGi7rrrLlVWVuqSSy6RJC1fvlz33nvvKfukagAAgNOlXoFo2rRp2rt3r26//XYdPXpUkhQcHKz09HRlZGSc0gIBAAAaWr0CkcPh0F//+lfdd9992rx5s0JCQtS1a1e+7gIAADRK9QpENc466yz169fvVNUCAADgF/XaVA0AAHAmIRABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbC/hA1KFDBzkcjlqP1NRUSdKgQYNq9d12220+c+zcuVMjRoxQaGioIiMjNW3aNFVVVfljOQAAIAA183cBv2bNmjU6duyYdfzFF1/osssu0zXXXGO1TZw4UTNnzrSOQ0NDrZ+PHTumESNGKDo6WitXrlRpaanGjh2r5s2b6+GHHz49iwAAAAEt4ANR27ZtfY4feeQRde7cWQMHDrTaQkNDFR0dXefzly1bpk2bNik3N1dRUVFKTEzUgw8+qPT0dGVmZiooKKhB6wcAAIEv4G+Z/djRo0f1yiuvaPz48XI4HFZ7dna22rRpo/POO08ZGRk6fPiw1VdYWKiEhARFRUVZbSkpKfJ6vdq4cWOd56moqJDX6/V5AACAM1fAXyH6sUWLFmn//v26+eabrbYbbrhB7du3V2xsrNavX6/09HQVFxfr7bffliR5PB6fMCTJOvZ4PHWeJysrSw888EDDLAIAAAScRhWIXnrpJQ0fPlyxsbFW26RJk6yfExISFBMTo0svvVTbt29X586d63WejIwMpaWlWcder1dut7v+hQMAgIDWaALR119/rdzcXOvKz8/p37+/JGnbtm3q3LmzoqOjtXr1ap8xZWVlkvSz+46cTqecTucpqBoAADQGjWYP0fz58xUZGakRI0b84riioiJJUkxMjCQpKSlJGzZs0O7du60xOTk5Cg8PV3x8fIPVCwAAGo9GcYWourpa8+fP17hx49Ss2f+VvH37di1cuFCXX365WrdurfXr12vq1KlKTk5Wz549JUlDhw5VfHy8brrpJs2aNUsej0fTp09XamoqV4EAAICkRhKIcnNztXPnTo0fP96nPSgoSLm5uZozZ44OHTokt9ut0aNHa/r06daYpk2bavHixZo8ebKSkpLUokULjRs3zudziwAAgL05jDHG30UEOq/XK5fLpfLycoWHhzfYeQ7s+rbB5gYas7DYdv4u4aR9k1vg7xKAgOQektxgc5/I63ej2UMEAADQUAhEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9ghEAADA9gI6EGVmZsrhcPg8unXrZvUfOXJEqampat26tc466yyNHj1aZWVlPnPs3LlTI0aMUGhoqCIjIzVt2jRVVVWd7qUAAIAA1szfBfyaHj16KDc31zpu1uz/Sp46daqWLFmiN998Uy6XS1OmTNFVV12lFStWSJKOHTumESNGKDo6WitXrlRpaanGjh2r5s2b6+GHHz7tawEAAIEp4ANRs2bNFB0dXau9vLxcL730khYuXKhLLrlEkjR//nx1795dn376qS644AItW7ZMmzZtUm5urqKiopSYmKgHH3xQ6enpyszMVFBQ0OleDgAACEABfctMkrZu3arY2Fh16tRJY8aM0c6dOyVJa9euVWVlpYYMGWKN7datm8455xwVFhZKkgoLC5WQkKCoqChrTEpKirxerzZu3Piz56yoqJDX6/V5AACAM1dAB6L+/ftrwYIFWrp0qebOnauSkhINGDBABw4ckMfjUVBQkFq2bOnznKioKHk8HkmSx+PxCUM1/TV9PycrK0sul8t6uN3uU7swAAAQUAL6ltnw4cOtn3v27Kn+/furffv2euONNxQSEtJg583IyFBaWpp17PV6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9913at26tRwOhx8rw+ng9Xrldrv1zTffKDw83N/lADiF+Pu2F2OMDhw4oNjY2F8da4tA1KZNGzVt2lRlZWU+7WVlZYqOjq413ul0yul0+rS1bNmyIUtEAAoPD+c/mMAZir9v+/i1K0M1bLGpOigoSH369NHy5cutturqai1fvlxJSUl+rAwAAAQCW1whkqS0tDSNGzdOffv21fnnn685c+bo0KFDuuWWW/xdGgAA8DPbBKLf//732rNnj2bMmCGPx6PExEQtXbq01kZrwOl06v7776912xRA48ffN36OwxzPe9EAAADOYLbYQwQAAPBLCEQAAMD2CEQAAMD2CESwlUGDBumuu+7ydxkATpFf+5t2OBxatGjRcc+Xl5cnh8Oh/fv3n3RtaFxs8y4zAID9lJaWqlWrVv4uA40AgQgAcMaq69sIgLpwywy2tW/fPo0dO1atWrVSaGiohg8frq1bt0r64ftv2rZtq3/+85/W+MTERMXExFjHn3zyiZxOpw4fPnzaawfwf6qrq3XvvfcqIiJC0dHRyszMtPp+ests5cqVSkxMVHBwsPr27atFixbJ4XCoqKjIZ861a9eqb9++Cg0N1YUXXqji4uLTsxj4DYEItnXzzTfrs88+03vvvafCwkIZY3T55ZersrJSDodDycnJysvLk/RDeNq8ebO+//57bdmyRZKUn5+vfv36KTQ01I+rAPDyyy+rRYsWWrVqlWbNmqWZM2cqJyen1jiv16uRI0cqISFB69at04MPPqj09PQ65/zzn/+sxx9/XJ999pmaNWum8ePHN/Qy4GfcMoMtbd26Ve+9955WrFihCy+8UJKUnZ0tt9utRYsW6ZprrtGgQYP0/PPPS5IKCgrUu3dvRUdHKy8vT926dVNeXp4GDhzoz2UAkNSzZ0/df//9kqSuXbvq6aef1vLly3XZZZf5jFu4cKEcDodefPFFBQcHKz4+Xv/7v/+riRMn1przoYcesv6+//SnP2nEiBE6cuSIgoODG35B8AuuEMGWNm/erGbNmql///5WW+vWrRUXF6fNmzdLkgYOHKhNmzZpz549ys/P16BBgzRo0CDl5eWpsrJSK1eu1KBBg/y0AgA1evbs6XMcExOj3bt31xpXXFysnj17+oSa888//1fnrLlVXtecOHMQiICfkZCQoIiICOXn5/sEovz8fK1Zs0aVlZXW1SUA/tO8eXOfY4fDoerq6lM2p8PhkKSTnhOBjUAEW+revbuqqqq0atUqq23v3r0qLi5WfHy8pB/+IzhgwAC9++672rhxoy6++GL17NlTFRUVev7559W3b1+1aNHCX0sAcILi4uK0YcMGVVRUWG1r1qzxY0UIJAQi2FLXrl01atQoTZw4UZ988ok+//xz3XjjjTr77LM1atQoa9ygQYP06quvKjExUWeddZaaNGmi5ORkZWdns38IaGRuuOEGVVdXa9KkSdq8ebP+/e9/67HHHpP0f1eBYF8EItjW/Pnz1adPH/32t79VUlKSjDH64IMPfC6VDxw4UMeOHfPZKzRo0KBabQACX3h4uN5//30VFRUpMTFRf/7znzVjxgxJYrM05DDGGH8XAQCAP2RnZ+uWW25ReXm5QkJC/F0O/Ii33QMAbOMf//iHOnXqpLPPPluff/650tPTde211xKGQCACANiHx+PRjBkz5PF4FBMTo2uuuUYPPfSQv8tCAOCWGQAAsD02VQMAANsjEAEAANsjEAEAANsjEAEAANsjEAEAANsjEAHA/5eXlyeHw6H9+/f7uxQfgVoXcCYhEAF+4vF4dMcdd6hTp05yOp1yu90aOXKkli9ffkrm37FjhxwOh4qKik7JfEBD6tChg+bMmePvMmBjfDAj4Ac7duzQRRddpJYtW+rRRx9VQkKCKisr9e9//1upqanasmWLv0s8LSorK32+O64hHTt2TA6HQ02a8P+BAGrjvwyAH9x+++1yOBxavXq1Ro8erXPPPVc9evRQWlqaPv30U0l1X+HZv3+/HA6H8vLyJEn79u3TmDFj1LZtW4WEhKhr166aP3++JKljx46SpN69e8vhcFhfRltdXa2ZM2eqXbt2cjqdSkxM1NKlS61z1Jz3jTfe0IABAxQSEqJ+/frpyy+/1Jo1a9S3b1+dddZZGj58uPbs2eOzrr///e/q3r27goOD1a1bNz377LO15n399dc1cOBABQcHKzs7u87fj8Ph0Ny5czV8+HCFhISoU6dO+uc//2n113ULqaioSA6HQzt27JAkLViwQC1bttR7772n+Ph4OZ1O7dy5UxUVFUpPT5fb7ZbT6VSXLl300ksv+Zx/7dq16tu3r0JDQ3XhhRequLjY6tu+fbtGjRqlqKgonXXWWerXr59yc3N9nv/ss8+qa9euCg4OVlRUlK6++mqrr7q6WllZWerYsaNCQkLUq1cvn7VJ0gcffKBzzz1XISEhGjx4sLWmXzJ79mwlJCSoRYsWcrvduv3223Xw4EGrv+b3sXjxYsXFxSk0NFRXX321Dh8+rJdfflkdOnRQq1atdOedd+rYsWPW8/bt26exY8eqVatWCg0N1fDhw7V161arPzMzU4mJiT61zJkzRx06dLCOb775Zl155ZV67LHHFBMTo9atWys1NVWVlZWSfvjC5K+//lpTp06Vw+Hgm+fhHwbAabV3717jcDjMww8//IvjSkpKjCTzn//8x2rbt2+fkWQ++ugjY4wxqampJjEx0axZs8aUlJSYnJwc89577xljjFm9erWRZHJzc01paanZu3evMcaY2bNnm/DwcPPqq6+aLVu2mHvvvdc0b97cfPnllz7n7datm1m6dKnZtGmTueCCC0yfPn3MoEGDzCeffGLWrVtnunTpYm677TartldeecXExMSYt956y3z11VfmrbfeMhEREWbBggU+83bo0MEas2vXrjrXLsm0bt3avPjii6a4uNhMnz7dNG3a1GzatMkYY8xHH31kJJl9+/ZZz/nPf/5jJJmSkhJjjDHz5883zZs3NxdeeKFZsWKF2bJlizl06JC59tprjdvtNm+//bbZvn27yc3NNa+99prPvP379zd5eXlm48aNZsCAAebCCy+0zlNUVGSee+45s2HDBvPll1+a6dOnm+DgYPP1118bY4xZs2aNadq0qVm4cKHZsWOHWbdunXnyySet5//lL3+xfrfbt2838+fPN06n0+Tl5RljjNm5c6dxOp0mLS3NbNmyxbzyyismKiqq1np/6oknnjAffvihKSkpMcuXLzdxcXFm8uTJVn/N7+Oyyy4z69atM/n5+aZ169Zm6NCh5tprrzUbN24077//vgkKCrJ+H8YYc8UVV5ju3bubgoICU1RUZFJSUkyXLl3M0aNHjTHG3H///aZXr161amnfvr11PG7cOBMeHm5uu+02s3nzZvP++++b0NBQ88ILLxhjfvibaNeunZk5c6YpLS01paWlP7tOoKEQiIDTbNWqVUaSefvtt39x3PEEopEjR5pbbrnluJ9vjDGxsbHmoYce8mnr16+fuf32232e9/e//93qf/XVV40ks3z5cqstKyvLxMXFWcedO3c2Cxcu9Jn3wQcfNElJST7zzpkz5xfXbcwPgejHYcsYY/r372+9wB9vIJJkioqKrDHFxcVGksnJyanzvDXz5ubmWm1Lliwxksz333//s/X26NHDPPXUU8YYY9566y0THh5uvF5vrXFHjhwxoaGhZuXKlT7tEyZMMNdff70xxpiMjAwTHx/v05+env6rgein3nzzTdO6dWvruOb3sW3bNqvt1ltvNaGhoebAgQNWW0pKirn11luNMcZ8+eWXRpJZsWKF1f/f//7XhISEmDfeeMMYc/yBqH379qaqqspqu+aaa8zvf/9767h9+/bmiSeeOO71Aacae4iA08ycwq8PnDx5skaPHq1169Zp6NChuvLKK3XhhRf+7Hiv16tdu3bpoosu8mm/6KKL9Pnnn/u09ezZ0/o5KipKkpSQkODTtnv3bknSoUOHtH37dk2YMEETJ060xlRVVcnlcvnM27dv3+NaW1JSUq3jE90gHhQU5LOOoqIiNW3aVAMHDvzF5/34OTExMZKk3bt365xzztHBgweVmZmpJUuWqLS0VFVVVfr++++1c+dOSdJll12m9u3bq1OnTho2bJiGDRum3/3udwoNDdW2bdt0+PBhXXbZZT7nO3r0qHr37i1J2rx5s/r37/+Lv4u65ObmKisrS1u2bJHX61VVVZWOHDmiw4cPKzQ0VJIUGhqqzp07W8+JiopShw4ddNZZZ/m01fxz3bx5s5o1a+ZTT+vWrRUXF6fNmzf/ak0/1qNHDzVt2tQ6jomJ0YYNG05oDqAhEYiA06xr165yOBy/unG6ZvPvjwNUzZ6LGsOHD9fXX3+tDz74QDk5Obr00kuVmpqqxx577KTr/PFm55o9HT9tq66uliRrr8qLL75Y68X8xy+CktSiRYuTru14fjeSFBIS4rMfJSQk5Ljmr2vtNWu95557lJOTo8cee0xdunRRSEiIrr76ah09elSSFBYWpnXr1ikvL0/Lli3TjBkzlJmZqTVr1li/pyVLlujss8/2OafT6Tyu2uqyY8cO/fa3v9XkyZP10EMPKSIiQp988okmTJigo0ePWoHopxvYHQ5HnW01az0eTZo0qRXy6/pncbLnARoam6qB0ywiIkIpKSl65plndOjQoVr9NRuF27ZtK0kqLS21+uq6QtK2bVuNGzdOr7zyiubMmaMXXnhB0g9XRyT5bJANDw9XbGysVqxY4TPHihUrFB8fX+81RUVFKTY2Vl999ZW6dOni86jZ3H2iajaX//i4e/fuko7/d/NTCQkJqq6uVn5+fr1qkn74Xd1888363e9+p4SEBEVHR9fa9NysWTMNGTJEs2bN0vr167Vjxw59+OGHPpu7f/p7crvdkqTu3btr9erVtdb+S9auXavq6mo9/vjjuuCCC3Tuuedq165d9V5jje7du6uqqkqrVq2y2vbu3avi4mLr35e2bdvK4/H4hKL6fNRDUFCQz7+rwOnGFSLAD5555hlddNFFOv/88zVz5kz17NlTVVVVysnJ0dy5c7V582aFhIToggsu0COPPKKOHTtq9+7dmj59us88M2bMUJ8+fdSjRw9VVFRo8eLFVmiIjIxUSEiIli5dqnbt2ik4OFgul0vTpk3T/fffr86dOysxMVHz589XUVHRz77j63g98MADuvPOO+VyuTRs2DBVVFTos88+0759+5SWlnbC87355pvq27evLr74YmVnZ2v16tXWu8FqAkRmZqYeeughffnll3r88cd/dc4OHTpo3LhxGj9+vP72t7+pV69e+vrrr7V7925de+21x1VX165d9fbbb2vkyJFyOBy67777fK50LF68WF999ZWSk5PVqlUrffDBB6qurlZcXJzCwsJ0zz33aOrUqaqurtbFF1+s8vJyrVixQuHh4Ro3bpxuu+02Pf7445o2bZr+8Ic/aO3atVqwYMEv1tSlSxdVVlbqqaee0siRI7VixQo999xzx7WeX1vrqFGjNHHiRD3//PMKCwvTn/70J5199tkaNWqUpB/eIbZnzx7NmjVLV199tZYuXap//etfCg8PP6FzdejQQQUFBbruuuvkdDrVpk2bk64fOCF+3cEE2NiuXbtMamqqad++vQkKCjJnn322ueKKK6wN08YYs2nTJpOUlGRCQkJMYmKiWbZsmc+m6gcffNB0797dhISEmIiICDNq1Cjz1VdfWc9/8cUXjdvtNk2aNDEDBw40xhhz7Ngxk5mZac4++2zTvHlz06tXL/Ovf/3Lek5dm7Hr2sQ8f/5843K5fNaUnZ1tEhMTTVBQkGnVqpVJTk62No//3CbvukgyzzzzjLnsssuM0+k0HTp0MK+//rrPmE8++cQkJCSY4OBgM2DAAPPmm2/W2lT90/qMMeb77783U6dONTExMSYoKMh06dLFzJs372fX+dPN2iUlJWbw4MEmJCTEuN1u8/TTT5uBAweaP/7xj8YYYz7++GMzcOBA06pVKxMSEmJ69uzpU3t1dbWZM2eOiYuLM82bNzdt27Y1KSkpJj8/3xrz/vvvmy5duhin02kGDBhg5s2b96ubqmfPnm1iYmJMSEiISUlJMf/4xz98nlPX76OuDdHjxo0zo0aNso6/++47c9NNNxmXy2XNXfOOxBpz5841brfbtGjRwowdO9Y89NBDtTZV/3hOY4z54x//aP07aYwxhYWFpmfPnsbpdBpemuAPDmNO4Q5PADgFHA6H3nnnHV155ZX+LgWATbCHCAAA2B6BCAAA2B6bqgEEHO7kAzjduEIEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABs7/8Bi3nA4V/MM+MAAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "df.describe(include='all').T"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:08.94152Z",
          "iopub.execute_input": "2024-06-26T05:50:08.942049Z",
          "iopub.status.idle": "2024-06-26T05:50:09.027244Z",
          "shell.execute_reply.started": "2024-06-26T05:50:08.942017Z",
          "shell.execute_reply": "2024-06-26T05:50:09.025856Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 645
        },
        "id": "k4rjxQ1kkwpF",
        "outputId": "96ad2b74-f77b-433e-d8aa-248af0d81092"
      },
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "                            count unique             top  freq       mean  \\\n",
              "Customer ID                3900.0    NaN             NaN   NaN     1950.5   \n",
              "Age                        3900.0    NaN             NaN   NaN  44.068462   \n",
              "Gender                       3900      2            Male  2652        NaN   \n",
              "Item Purchased               3900     25          Blouse   171        NaN   \n",
              "Category                     3900      4        Clothing  1737        NaN   \n",
              "Purchase Amount (USD)      3900.0    NaN             NaN   NaN  59.764359   \n",
              "Location                     3900     50         Montana    96        NaN   \n",
              "Size                         3900      4               M  1755        NaN   \n",
              "Color                        3900     25           Olive   177        NaN   \n",
              "Season                       3900      4          Spring   999        NaN   \n",
              "Review Rating              3900.0    NaN             NaN   NaN   3.749949   \n",
              "Subscription Status          3900      2              No  2847        NaN   \n",
              "Shipping Type                3900      6   Free Shipping   675        NaN   \n",
              "Discount Applied             3900      2              No  2223        NaN   \n",
              "Promo Code Used              3900      2              No  2223        NaN   \n",
              "Previous Purchases         3900.0    NaN             NaN   NaN  25.351538   \n",
              "Payment Method               3900      6          PayPal   677        NaN   \n",
              "Frequency of Purchases       3900      7  Every 3 Months   584        NaN   \n",
              "Customer purchased amount    3900      2             low  1986        NaN   \n",
              "\n",
              "                                   std   min     25%     50%      75%     max  \n",
              "Customer ID                1125.977353   1.0  975.75  1950.5  2925.25  3900.0  \n",
              "Age                          15.207589  18.0    31.0    44.0     57.0    70.0  \n",
              "Gender                             NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Item Purchased                     NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Category                           NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Purchase Amount (USD)        23.685392  20.0    39.0    60.0     81.0   100.0  \n",
              "Location                           NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Size                               NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Color                              NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Season                             NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Review Rating                 0.716223   2.5     3.1     3.7      4.4     5.0  \n",
              "Subscription Status                NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Shipping Type                      NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Discount Applied                   NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Promo Code Used                    NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Previous Purchases           14.447125   1.0    13.0    25.0     38.0    50.0  \n",
              "Payment Method                     NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Frequency of Purchases             NaN   NaN     NaN     NaN      NaN     NaN  \n",
              "Customer purchased amount          NaN   NaN     NaN     NaN      NaN     NaN  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-4997302e-6ab6-4613-b638-965a174b871a\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>count</th>\n",
              "      <th>unique</th>\n",
              "      <th>top</th>\n",
              "      <th>freq</th>\n",
              "      <th>mean</th>\n",
              "      <th>std</th>\n",
              "      <th>min</th>\n",
              "      <th>25%</th>\n",
              "      <th>50%</th>\n",
              "      <th>75%</th>\n",
              "      <th>max</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>Customer ID</th>\n",
              "      <td>3900.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>1950.5</td>\n",
              "      <td>1125.977353</td>\n",
              "      <td>1.0</td>\n",
              "      <td>975.75</td>\n",
              "      <td>1950.5</td>\n",
              "      <td>2925.25</td>\n",
              "      <td>3900.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Age</th>\n",
              "      <td>3900.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>44.068462</td>\n",
              "      <td>15.207589</td>\n",
              "      <td>18.0</td>\n",
              "      <td>31.0</td>\n",
              "      <td>44.0</td>\n",
              "      <td>57.0</td>\n",
              "      <td>70.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Gender</th>\n",
              "      <td>3900</td>\n",
              "      <td>2</td>\n",
              "      <td>Male</td>\n",
              "      <td>2652</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Item Purchased</th>\n",
              "      <td>3900</td>\n",
              "      <td>25</td>\n",
              "      <td>Blouse</td>\n",
              "      <td>171</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Category</th>\n",
              "      <td>3900</td>\n",
              "      <td>4</td>\n",
              "      <td>Clothing</td>\n",
              "      <td>1737</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Purchase Amount (USD)</th>\n",
              "      <td>3900.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>59.764359</td>\n",
              "      <td>23.685392</td>\n",
              "      <td>20.0</td>\n",
              "      <td>39.0</td>\n",
              "      <td>60.0</td>\n",
              "      <td>81.0</td>\n",
              "      <td>100.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Location</th>\n",
              "      <td>3900</td>\n",
              "      <td>50</td>\n",
              "      <td>Montana</td>\n",
              "      <td>96</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Size</th>\n",
              "      <td>3900</td>\n",
              "      <td>4</td>\n",
              "      <td>M</td>\n",
              "      <td>1755</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Color</th>\n",
              "      <td>3900</td>\n",
              "      <td>25</td>\n",
              "      <td>Olive</td>\n",
              "      <td>177</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Season</th>\n",
              "      <td>3900</td>\n",
              "      <td>4</td>\n",
              "      <td>Spring</td>\n",
              "      <td>999</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Review Rating</th>\n",
              "      <td>3900.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>3.749949</td>\n",
              "      <td>0.716223</td>\n",
              "      <td>2.5</td>\n",
              "      <td>3.1</td>\n",
              "      <td>3.7</td>\n",
              "      <td>4.4</td>\n",
              "      <td>5.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Subscription Status</th>\n",
              "      <td>3900</td>\n",
              "      <td>2</td>\n",
              "      <td>No</td>\n",
              "      <td>2847</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Shipping Type</th>\n",
              "      <td>3900</td>\n",
              "      <td>6</td>\n",
              "      <td>Free Shipping</td>\n",
              "      <td>675</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Discount Applied</th>\n",
              "      <td>3900</td>\n",
              "      <td>2</td>\n",
              "      <td>No</td>\n",
              "      <td>2223</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Promo Code Used</th>\n",
              "      <td>3900</td>\n",
              "      <td>2</td>\n",
              "      <td>No</td>\n",
              "      <td>2223</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Previous Purchases</th>\n",
              "      <td>3900.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>25.351538</td>\n",
              "      <td>14.447125</td>\n",
              "      <td>1.0</td>\n",
              "      <td>13.0</td>\n",
              "      <td>25.0</td>\n",
              "      <td>38.0</td>\n",
              "      <td>50.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Payment Method</th>\n",
              "      <td>3900</td>\n",
              "      <td>6</td>\n",
              "      <td>PayPal</td>\n",
              "      <td>677</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Frequency of Purchases</th>\n",
              "      <td>3900</td>\n",
              "      <td>7</td>\n",
              "      <td>Every 3 Months</td>\n",
              "      <td>584</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Customer purchased amount</th>\n",
              "      <td>3900</td>\n",
              "      <td>2</td>\n",
              "      <td>low</td>\n",
              "      <td>1986</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-4997302e-6ab6-4613-b638-965a174b871a')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-4997302e-6ab6-4613-b638-965a174b871a button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-4997302e-6ab6-4613-b638-965a174b871a');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-e9c0c51e-9dd8-4025-ac22-4964c9db88dd\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-e9c0c51e-9dd8-4025-ac22-4964c9db88dd')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-e9c0c51e-9dd8-4025-ac22-4964c9db88dd button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"df\",\n  \"rows\": 19,\n  \"fields\": [\n    {\n      \"column\": \"count\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": 3900.0,\n        \"max\": 3900.0,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          3900.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"unique\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": 2,\n        \"max\": 50,\n        \"num_unique_values\": 6,\n        \"samples\": [\n          2\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"top\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 12,\n        \"samples\": [\n          \"Every 3 Months\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"freq\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": \"96\",\n        \"max\": \"2847\",\n        \"num_unique_values\": 13,\n        \"samples\": [\n          \"584\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"mean\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": 3.7499487179487176,\n        \"max\": 1950.5,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          44.06846153846154\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"std\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": 0.7162228139312417,\n        \"max\": 1125.9773532358456,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          15.207589127162382\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"min\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": 1.0,\n        \"max\": 20.0,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          18.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"25%\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": 3.1,\n        \"max\": 975.75,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          31.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"50%\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": 3.7,\n        \"max\": 1950.5,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          44.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"75%\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": 4.4,\n        \"max\": 2925.25,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          57.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"max\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": 5.0,\n        \"max\": 3900.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          70.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 15
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "df_cleaned = df.copy()\n",
        "df_cleaned.info()"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.029235Z",
          "iopub.execute_input": "2024-06-26T05:50:09.029669Z",
          "iopub.status.idle": "2024-06-26T05:50:09.059782Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.029626Z",
          "shell.execute_reply": "2024-06-26T05:50:09.058223Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "JkuS42JlkwpF",
        "outputId": "b346dedb-d4b8-4eab-a2b0-ce304ecc8689"
      },
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "<class 'pandas.core.frame.DataFrame'>\n",
            "RangeIndex: 3900 entries, 0 to 3899\n",
            "Data columns (total 19 columns):\n",
            " #   Column                     Non-Null Count  Dtype  \n",
            "---  ------                     --------------  -----  \n",
            " 0   Customer ID                3900 non-null   int64  \n",
            " 1   Age                        3900 non-null   int64  \n",
            " 2   Gender                     3900 non-null   object \n",
            " 3   Item Purchased             3900 non-null   object \n",
            " 4   Category                   3900 non-null   object \n",
            " 5   Purchase Amount (USD)      3900 non-null   int64  \n",
            " 6   Location                   3900 non-null   object \n",
            " 7   Size                       3900 non-null   object \n",
            " 8   Color                      3900 non-null   object \n",
            " 9   Season                     3900 non-null   object \n",
            " 10  Review Rating              3900 non-null   float64\n",
            " 11  Subscription Status        3900 non-null   object \n",
            " 12  Shipping Type              3900 non-null   object \n",
            " 13  Discount Applied           3900 non-null   object \n",
            " 14  Promo Code Used            3900 non-null   object \n",
            " 15  Previous Purchases         3900 non-null   int64  \n",
            " 16  Payment Method             3900 non-null   object \n",
            " 17  Frequency of Purchases     3900 non-null   object \n",
            " 18  Customer purchased amount  3900 non-null   object \n",
            "dtypes: float64(1), int64(4), object(14)\n",
            "memory usage: 579.0+ KB\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "df_cleaned.drop(['Customer ID', 'Item Purchased', 'Location', 'Color', 'Promo Code Used',\n",
        "                 'Gender', 'Category', 'Size', 'Subscription Status', 'Purchase Amount (USD)'], axis=1, inplace=True)\n",
        "df_cleaned.head(3)"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.061193Z",
          "iopub.execute_input": "2024-06-26T05:50:09.061566Z",
          "iopub.status.idle": "2024-06-26T05:50:09.081484Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.061533Z",
          "shell.execute_reply": "2024-06-26T05:50:09.080189Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 143
        },
        "id": "0mTjBOLEkwpF",
        "outputId": "f906aa76-b84d-4eb9-9e41-c9e25be55542"
      },
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "   Age  Season  Review Rating  Shipping Type Discount Applied  \\\n",
              "0   55  Winter            3.1        Express              Yes   \n",
              "1   19  Winter            3.1        Express              Yes   \n",
              "2   50  Spring            3.1  Free Shipping              Yes   \n",
              "\n",
              "   Previous Purchases Payment Method Frequency of Purchases  \\\n",
              "0                  14          Venmo            Fortnightly   \n",
              "1                   2           Cash            Fortnightly   \n",
              "2                  23    Credit Card                 Weekly   \n",
              "\n",
              "  Customer purchased amount  \n",
              "0                       low  \n",
              "1                      high  \n",
              "2                      high  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-a186562f-8318-452f-a4f4-5f78031da616\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Age</th>\n",
              "      <th>Season</th>\n",
              "      <th>Review Rating</th>\n",
              "      <th>Shipping Type</th>\n",
              "      <th>Discount Applied</th>\n",
              "      <th>Previous Purchases</th>\n",
              "      <th>Payment Method</th>\n",
              "      <th>Frequency of Purchases</th>\n",
              "      <th>Customer purchased amount</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>55</td>\n",
              "      <td>Winter</td>\n",
              "      <td>3.1</td>\n",
              "      <td>Express</td>\n",
              "      <td>Yes</td>\n",
              "      <td>14</td>\n",
              "      <td>Venmo</td>\n",
              "      <td>Fortnightly</td>\n",
              "      <td>low</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>19</td>\n",
              "      <td>Winter</td>\n",
              "      <td>3.1</td>\n",
              "      <td>Express</td>\n",
              "      <td>Yes</td>\n",
              "      <td>2</td>\n",
              "      <td>Cash</td>\n",
              "      <td>Fortnightly</td>\n",
              "      <td>high</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>50</td>\n",
              "      <td>Spring</td>\n",
              "      <td>3.1</td>\n",
              "      <td>Free Shipping</td>\n",
              "      <td>Yes</td>\n",
              "      <td>23</td>\n",
              "      <td>Credit Card</td>\n",
              "      <td>Weekly</td>\n",
              "      <td>high</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a186562f-8318-452f-a4f4-5f78031da616')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-a186562f-8318-452f-a4f4-5f78031da616 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-a186562f-8318-452f-a4f4-5f78031da616');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-76d8e083-2aa0-4907-a5e1-600cd5cde7fb\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-76d8e083-2aa0-4907-a5e1-600cd5cde7fb')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-76d8e083-2aa0-4907-a5e1-600cd5cde7fb button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df_cleaned",
              "summary": "{\n  \"name\": \"df_cleaned\",\n  \"rows\": 3900,\n  \"fields\": [\n    {\n      \"column\": \"Age\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 15,\n        \"min\": 18,\n        \"max\": 70,\n        \"num_unique_values\": 53,\n        \"samples\": [\n          56,\n          24,\n          51\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Season\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"Spring\",\n          \"Fall\",\n          \"Winter\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Review Rating\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.7162228139312417,\n        \"min\": 2.5,\n        \"max\": 5.0,\n        \"num_unique_values\": 26,\n        \"samples\": [\n          4.9,\n          5.0,\n          3.1\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Shipping Type\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Express\",\n          \"Free Shipping\",\n          \"Store Pickup\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Discount Applied\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"No\",\n          \"Yes\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Previous Purchases\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 14,\n        \"min\": 1,\n        \"max\": 50,\n        \"num_unique_values\": 50,\n        \"samples\": [\n          36,\n          47\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Payment Method\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Venmo\",\n          \"Cash\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Frequency of Purchases\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 7,\n        \"samples\": [\n          \"Fortnightly\",\n          \"Weekly\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Customer purchased amount\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"high\",\n          \"low\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 17
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "<h3 style=\"color:#6E4555;\">\n",
        "              Train Test Split\n",
        "</h3>\n",
        "<a class=\"anchor\" id=\"feature_selection\"></a>"
      ],
      "metadata": {
        "id": "uvt2p3J2kwpG"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "targets = df_cleaned['Customer purchased amount']\n",
        "inputs = df_cleaned.drop('Customer purchased amount', axis=1)"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.0829Z",
          "iopub.execute_input": "2024-06-26T05:50:09.083303Z",
          "iopub.status.idle": "2024-06-26T05:50:09.102829Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.083268Z",
          "shell.execute_reply": "2024-06-26T05:50:09.10156Z"
        },
        "trusted": true,
        "id": "0sey1825kwpG"
      },
      "execution_count": 18,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "categorical_features = []\n",
        "numerical_features = []\n",
        "\n",
        "for col in inputs.columns:\n",
        "  if inputs[col].dtype == 'object':\n",
        "    categorical_features.append(col)\n",
        "  else:\n",
        "    numerical_features.append(col)\n",
        "print(len(numerical_features), len(categorical_features))"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.104532Z",
          "iopub.execute_input": "2024-06-26T05:50:09.105026Z",
          "iopub.status.idle": "2024-06-26T05:50:09.124865Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.104981Z",
          "shell.execute_reply": "2024-06-26T05:50:09.123482Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "tnffapJTkwpG",
        "outputId": "25a9b2fe-0782-486b-fb17-b0de48905687"
      },
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "3 5\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#63595C;\n",
        "           font-size:110%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: center\">\n",
        "\n",
        "<h1 style=\"padding: 20px;\n",
        "              color:#F0EDEE;\">\n",
        "              4- Preprocessing\n",
        "</h1>\n",
        "<a class=\"anchor\" id=\"preprocessing\"></a>\n",
        "</div>"
      ],
      "metadata": {
        "id": "4GZ878-1kwpH"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "#Initialize OneHotEncoder\n",
        "encoder = OneHotEncoder(sparse_output=False)\n",
        "\n",
        "# Apply one-hot encoding to the categorical columns\n",
        "one_hot_encoded = encoder.fit_transform(inputs[categorical_features])\n",
        "\n",
        "#Create a DataFrame with the one-hot encoded columns\n",
        "#We use get_feature_names_out() to get the column names for the encoded data\n",
        "categorical_features_encoded = encoder.get_feature_names_out(categorical_features)\n",
        "print('categorical_features_encoded = ', categorical_features_encoded)\n",
        "one_hot_df = pd.DataFrame(one_hot_encoded, columns=categorical_features_encoded)\n",
        "\n",
        "# Concatenate the one-hot encoded dataframe with the original dataframe\n",
        "df_encoded = pd.concat([inputs, one_hot_df], axis=1)\n",
        "\n",
        "# Drop the original categorical columns\n",
        "df_encoded = df_encoded.drop(categorical_features, axis=1)\n",
        "\n",
        "# Display the resulting dataframe\n",
        "df_encoded"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.126535Z",
          "iopub.execute_input": "2024-06-26T05:50:09.126933Z",
          "iopub.status.idle": "2024-06-26T05:50:09.216851Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.126901Z",
          "shell.execute_reply": "2024-06-26T05:50:09.215509Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 704
        },
        "id": "k_ewheJFkwpH",
        "outputId": "1ebc99de-fd73-4f59-fe19-c98160165e0a"
      },
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "categorical_features_encoded =  ['Season_Fall' 'Season_Spring' 'Season_Summer' 'Season_Winter'\n",
            " 'Shipping Type_2-Day Shipping' 'Shipping Type_Express'\n",
            " 'Shipping Type_Free Shipping' 'Shipping Type_Next Day Air'\n",
            " 'Shipping Type_Standard' 'Shipping Type_Store Pickup'\n",
            " 'Discount Applied_No' 'Discount Applied_Yes'\n",
            " 'Payment Method_Bank Transfer' 'Payment Method_Cash'\n",
            " 'Payment Method_Credit Card' 'Payment Method_Debit Card'\n",
            " 'Payment Method_PayPal' 'Payment Method_Venmo'\n",
            " 'Frequency of Purchases_Annually' 'Frequency of Purchases_Bi-Weekly'\n",
            " 'Frequency of Purchases_Every 3 Months'\n",
            " 'Frequency of Purchases_Fortnightly' 'Frequency of Purchases_Monthly'\n",
            " 'Frequency of Purchases_Quarterly' 'Frequency of Purchases_Weekly']\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "      Age  Review Rating  Previous Purchases  Season_Fall  Season_Spring  \\\n",
              "0      55            3.1                  14          0.0            0.0   \n",
              "1      19            3.1                   2          0.0            0.0   \n",
              "2      50            3.1                  23          0.0            1.0   \n",
              "3      21            3.5                  49          0.0            1.0   \n",
              "4      45            2.7                  31          0.0            1.0   \n",
              "...   ...            ...                 ...          ...            ...   \n",
              "3895   40            4.2                  32          0.0            0.0   \n",
              "3896   52            4.5                  41          0.0            1.0   \n",
              "3897   46            2.9                  24          0.0            1.0   \n",
              "3898   44            3.8                  24          0.0            0.0   \n",
              "3899   52            3.1                  33          0.0            1.0   \n",
              "\n",
              "      Season_Summer  Season_Winter  Shipping Type_2-Day Shipping  \\\n",
              "0               0.0            1.0                           0.0   \n",
              "1               0.0            1.0                           0.0   \n",
              "2               0.0            0.0                           0.0   \n",
              "3               0.0            0.0                           0.0   \n",
              "4               0.0            0.0                           0.0   \n",
              "...             ...            ...                           ...   \n",
              "3895            1.0            0.0                           1.0   \n",
              "3896            0.0            0.0                           0.0   \n",
              "3897            0.0            0.0                           0.0   \n",
              "3898            1.0            0.0                           0.0   \n",
              "3899            0.0            0.0                           0.0   \n",
              "\n",
              "      Shipping Type_Express  Shipping Type_Free Shipping  ...  \\\n",
              "0                       1.0                          0.0  ...   \n",
              "1                       1.0                          0.0  ...   \n",
              "2                       0.0                          1.0  ...   \n",
              "3                       0.0                          0.0  ...   \n",
              "4                       0.0                          1.0  ...   \n",
              "...                     ...                          ...  ...   \n",
              "3895                    0.0                          0.0  ...   \n",
              "3896                    0.0                          0.0  ...   \n",
              "3897                    0.0                          0.0  ...   \n",
              "3898                    1.0                          0.0  ...   \n",
              "3899                    0.0                          0.0  ...   \n",
              "\n",
              "      Payment Method_Debit Card  Payment Method_PayPal  Payment Method_Venmo  \\\n",
              "0                           0.0                    0.0                   1.0   \n",
              "1                           0.0                    0.0                   0.0   \n",
              "2                           0.0                    0.0                   0.0   \n",
              "3                           0.0                    1.0                   0.0   \n",
              "4                           0.0                    1.0                   0.0   \n",
              "...                         ...                    ...                   ...   \n",
              "3895                        0.0                    0.0                   1.0   \n",
              "3896                        0.0                    0.0                   0.0   \n",
              "3897                        0.0                    0.0                   1.0   \n",
              "3898                        0.0                    0.0                   1.0   \n",
              "3899                        0.0                    0.0                   1.0   \n",
              "\n",
              "      Frequency of Purchases_Annually  Frequency of Purchases_Bi-Weekly  \\\n",
              "0                                 0.0                               0.0   \n",
              "1                                 0.0                               0.0   \n",
              "2                                 0.0                               0.0   \n",
              "3                                 0.0                               0.0   \n",
              "4                                 1.0                               0.0   \n",
              "...                               ...                               ...   \n",
              "3895                              0.0                               0.0   \n",
              "3896                              0.0                               1.0   \n",
              "3897                              0.0                               0.0   \n",
              "3898                              0.0                               0.0   \n",
              "3899                              0.0                               0.0   \n",
              "\n",
              "      Frequency of Purchases_Every 3 Months  \\\n",
              "0                                       0.0   \n",
              "1                                       0.0   \n",
              "2                                       0.0   \n",
              "3                                       0.0   \n",
              "4                                       0.0   \n",
              "...                                     ...   \n",
              "3895                                    0.0   \n",
              "3896                                    0.0   \n",
              "3897                                    0.0   \n",
              "3898                                    0.0   \n",
              "3899                                    0.0   \n",
              "\n",
              "      Frequency of Purchases_Fortnightly  Frequency of Purchases_Monthly  \\\n",
              "0                                    1.0                             0.0   \n",
              "1                                    1.0                             0.0   \n",
              "2                                    0.0                             0.0   \n",
              "3                                    0.0                             0.0   \n",
              "4                                    0.0                             0.0   \n",
              "...                                  ...                             ...   \n",
              "3895                                 0.0                             0.0   \n",
              "3896                                 0.0                             0.0   \n",
              "3897                                 0.0                             0.0   \n",
              "3898                                 0.0                             0.0   \n",
              "3899                                 0.0                             0.0   \n",
              "\n",
              "      Frequency of Purchases_Quarterly  Frequency of Purchases_Weekly  \n",
              "0                                  0.0                            0.0  \n",
              "1                                  0.0                            0.0  \n",
              "2                                  0.0                            1.0  \n",
              "3                                  0.0                            1.0  \n",
              "4                                  0.0                            0.0  \n",
              "...                                ...                            ...  \n",
              "3895                               0.0                            1.0  \n",
              "3896                               0.0                            0.0  \n",
              "3897                               1.0                            0.0  \n",
              "3898                               0.0                            1.0  \n",
              "3899                               1.0                            0.0  \n",
              "\n",
              "[3900 rows x 28 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-201b2596-101b-4471-a926-00856b4cd571\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Age</th>\n",
              "      <th>Review Rating</th>\n",
              "      <th>Previous Purchases</th>\n",
              "      <th>Season_Fall</th>\n",
              "      <th>Season_Spring</th>\n",
              "      <th>Season_Summer</th>\n",
              "      <th>Season_Winter</th>\n",
              "      <th>Shipping Type_2-Day Shipping</th>\n",
              "      <th>Shipping Type_Express</th>\n",
              "      <th>Shipping Type_Free Shipping</th>\n",
              "      <th>...</th>\n",
              "      <th>Payment Method_Debit Card</th>\n",
              "      <th>Payment Method_PayPal</th>\n",
              "      <th>Payment Method_Venmo</th>\n",
              "      <th>Frequency of Purchases_Annually</th>\n",
              "      <th>Frequency of Purchases_Bi-Weekly</th>\n",
              "      <th>Frequency of Purchases_Every 3 Months</th>\n",
              "      <th>Frequency of Purchases_Fortnightly</th>\n",
              "      <th>Frequency of Purchases_Monthly</th>\n",
              "      <th>Frequency of Purchases_Quarterly</th>\n",
              "      <th>Frequency of Purchases_Weekly</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>55</td>\n",
              "      <td>3.1</td>\n",
              "      <td>14</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>19</td>\n",
              "      <td>3.1</td>\n",
              "      <td>2</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>50</td>\n",
              "      <td>3.1</td>\n",
              "      <td>23</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>21</td>\n",
              "      <td>3.5</td>\n",
              "      <td>49</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>45</td>\n",
              "      <td>2.7</td>\n",
              "      <td>31</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3895</th>\n",
              "      <td>40</td>\n",
              "      <td>4.2</td>\n",
              "      <td>32</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3896</th>\n",
              "      <td>52</td>\n",
              "      <td>4.5</td>\n",
              "      <td>41</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3897</th>\n",
              "      <td>46</td>\n",
              "      <td>2.9</td>\n",
              "      <td>24</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3898</th>\n",
              "      <td>44</td>\n",
              "      <td>3.8</td>\n",
              "      <td>24</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3899</th>\n",
              "      <td>52</td>\n",
              "      <td>3.1</td>\n",
              "      <td>33</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>...</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>3900 rows × 28 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-201b2596-101b-4471-a926-00856b4cd571')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-201b2596-101b-4471-a926-00856b4cd571 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-201b2596-101b-4471-a926-00856b4cd571');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-8644a844-646a-4b1e-b2f7-964edc643fd0\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-8644a844-646a-4b1e-b2f7-964edc643fd0')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-8644a844-646a-4b1e-b2f7-964edc643fd0 button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "  <div id=\"id_aabe65f6-661c-4303-92d0-71d4e0d34e5e\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('df_encoded')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_aabe65f6-661c-4303-92d0-71d4e0d34e5e button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('df_encoded');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df_encoded"
            }
          },
          "metadata": {},
          "execution_count": 20
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "X_train, X_test, y_train, y_test = train_test_split(df_encoded, targets, test_size=0.2, random_state=42)\n",
        "X_train.shape, y_train.shape, X_test.shape, y_test.shape"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.218624Z",
          "iopub.execute_input": "2024-06-26T05:50:09.219088Z",
          "iopub.status.idle": "2024-06-26T05:50:09.233547Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.219048Z",
          "shell.execute_reply": "2024-06-26T05:50:09.232241Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "V-RaCitnkwpI",
        "outputId": "4de9f226-abb5-46b3-9ba9-b9418361c830"
      },
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "((3120, 28), (3120,), (780, 28), (780,))"
            ]
          },
          "metadata": {},
          "execution_count": 21
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Define preprocessing steps\n",
        "numerical_pipeline = Pipeline([\n",
        "    ('scaler', MinMaxScaler()),\n",
        "])"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.235228Z",
          "iopub.execute_input": "2024-06-26T05:50:09.236386Z",
          "iopub.status.idle": "2024-06-26T05:50:09.246408Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.236341Z",
          "shell.execute_reply": "2024-06-26T05:50:09.244915Z"
        },
        "trusted": true,
        "id": "jcl_bRXAkwpI"
      },
      "execution_count": 22,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Combine preprocessing steps; with this code you can easily add categorical preprocessing steps\n",
        "preprocessor = ColumnTransformer([\n",
        "    ('num', numerical_pipeline, numerical_features),\n",
        "])"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.248234Z",
          "iopub.execute_input": "2024-06-26T05:50:09.248654Z",
          "iopub.status.idle": "2024-06-26T05:50:09.266657Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.248619Z",
          "shell.execute_reply": "2024-06-26T05:50:09.26536Z"
        },
        "trusted": true,
        "id": "GnXXHJrqkwpJ"
      },
      "execution_count": 23,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Apply preprocessing separately to train ant test\n",
        "# NOTE: If you perform these preprocessings before splitting, it might cause data leakage and overfitting\n",
        "\n",
        "data_preprocessed_train = X_train.copy()\n",
        "data_preprocessed_train = preprocessor.fit_transform(data_preprocessed_train)\n",
        "print(\"Features after preprocessing for Train Set:\", data_preprocessed_train.shape)\n",
        "\n",
        "data_preprocessed_test = X_test.copy()\n",
        "data_preprocessed_test = preprocessor.fit_transform(data_preprocessed_test)\n",
        "print(\"Features after preprocessing for Test Set:\", data_preprocessed_test.shape)"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.268782Z",
          "iopub.execute_input": "2024-06-26T05:50:09.269226Z",
          "iopub.status.idle": "2024-06-26T05:50:09.303547Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.269184Z",
          "shell.execute_reply": "2024-06-26T05:50:09.302086Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "rRZM_ZPPkwpK",
        "outputId": "fb4cbd74-109b-4497-865e-ae9f0e56d2a4"
      },
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Features after preprocessing for Train Set: (3120, 3)\n",
            "Features after preprocessing for Test Set: (780, 3)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Access the feature names after preprocessing; If you have one hot encoding or variance_thresholding for example,\n",
        "# the column names change and you need to access the new column names in this way\n",
        "\n",
        "final_numerical_features = list(preprocessor.transformers_[0][1]\\\n",
        "    ['scaler'].get_feature_names_out(numerical_features))\n",
        "final_numerical_features"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.305014Z",
          "iopub.execute_input": "2024-06-26T05:50:09.305479Z",
          "iopub.status.idle": "2024-06-26T05:50:09.31443Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.305435Z",
          "shell.execute_reply": "2024-06-26T05:50:09.313104Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "gzMCOv8ckwpK",
        "outputId": "162a806a-43b8-4e31-a0b9-8918e03fac31"
      },
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['Age', 'Review Rating', 'Previous Purchases']"
            ]
          },
          "metadata": {},
          "execution_count": 25
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "X_train.index = np.arange(len(X_train))\n",
        "X_test.index = np.arange(len(X_test))\n",
        "\n",
        "y_train.index = np.arange(len(y_train))\n",
        "y_test.index = np.arange(len(y_test))"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.31625Z",
          "iopub.execute_input": "2024-06-26T05:50:09.316711Z",
          "iopub.status.idle": "2024-06-26T05:50:09.334648Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.316669Z",
          "shell.execute_reply": "2024-06-26T05:50:09.333183Z"
        },
        "trusted": true,
        "id": "K7aMSwv3kwpK"
      },
      "execution_count": 26,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "df_preprocessed_train = pd.DataFrame(data_preprocessed_train, columns=final_numerical_features)\n",
        "X_train = pd.concat([df_preprocessed_train, X_train[categorical_features_encoded]], axis=1)\n",
        "\n",
        "df_preprocessed_test = pd.DataFrame(data_preprocessed_test, columns=final_numerical_features)\n",
        "X_test = pd.concat([df_preprocessed_test, X_test[categorical_features_encoded]], axis=1)"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.336273Z",
          "iopub.execute_input": "2024-06-26T05:50:09.337528Z",
          "iopub.status.idle": "2024-06-26T05:50:09.357791Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.337384Z",
          "shell.execute_reply": "2024-06-26T05:50:09.356409Z"
        },
        "trusted": true,
        "id": "979bbVl7kwpL"
      },
      "execution_count": 27,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "X_train.shape, y_train.shape, X_test.shape, y_test.shape"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.359992Z",
          "iopub.execute_input": "2024-06-26T05:50:09.360527Z",
          "iopub.status.idle": "2024-06-26T05:50:09.378063Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.360483Z",
          "shell.execute_reply": "2024-06-26T05:50:09.376806Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "zIqpisftkwpL",
        "outputId": "94059c6a-a8d3-424b-fcae-8adb09ae5e1c"
      },
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "((3120, 28), (3120,), (780, 28), (780,))"
            ]
          },
          "metadata": {},
          "execution_count": 28
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "<h3 style=\"color:#6E4555;\">\n",
        "              Feature Selection\n",
        "</h3>\n",
        "<a class=\"anchor\" id=\"feature_selection\"></a>"
      ],
      "metadata": {
        "id": "ilC_TTl1kwpM"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "le = LabelEncoder()\n",
        "y_test_encoded = le.fit_transform(y_test)\n",
        "y_train_encoded = le.fit_transform(y_train)\n",
        "y_train_encoded"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.380166Z",
          "iopub.execute_input": "2024-06-26T05:50:09.380619Z",
          "iopub.status.idle": "2024-06-26T05:50:09.394442Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.380577Z",
          "shell.execute_reply": "2024-06-26T05:50:09.393227Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "HEc56A1gkwpM",
        "outputId": "b6fd0cf4-e217-4921-fddb-b34e774ee1c0"
      },
      "execution_count": 29,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([0, 0, 0, ..., 0, 0, 1])"
            ]
          },
          "metadata": {},
          "execution_count": 29
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "imp = mutual_info_regression(X_train, y_train_encoded)\n",
        "imp_df = pd.DataFrame(imp, index=X_train.columns)\n",
        "imp_df.columns = ['importance']\n",
        "imp_df.sort_values(by='importance', ascending=False, inplace=True)\n",
        "imp_df"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.396397Z",
          "iopub.execute_input": "2024-06-26T05:50:09.396853Z",
          "iopub.status.idle": "2024-06-26T05:50:09.969796Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.39681Z",
          "shell.execute_reply": "2024-06-26T05:50:09.968396Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 927
        },
        "id": "p9P0VI42kwpM",
        "outputId": "308d5123-226d-416a-be3d-f884d6d0aab5"
      },
      "execution_count": 30,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "                                       importance\n",
              "Payment Method_PayPal                    0.025144\n",
              "Frequency of Purchases_Monthly           0.023889\n",
              "Payment Method_Venmo                     0.016563\n",
              "Shipping Type_Next Day Air               0.015320\n",
              "Shipping Type_Express                    0.012923\n",
              "Discount Applied_No                      0.007603\n",
              "Frequency of Purchases_Weekly            0.007232\n",
              "Season_Fall                              0.007122\n",
              "Frequency of Purchases_Quarterly         0.006795\n",
              "Previous Purchases                       0.005654\n",
              "Payment Method_Bank Transfer             0.003805\n",
              "Payment Method_Credit Card               0.003265\n",
              "Frequency of Purchases_Annually          0.003014\n",
              "Payment Method_Cash                      0.002399\n",
              "Review Rating                            0.001874\n",
              "Frequency of Purchases_Every 3 Months    0.000000\n",
              "Frequency of Purchases_Fortnightly       0.000000\n",
              "Frequency of Purchases_Bi-Weekly         0.000000\n",
              "Age                                      0.000000\n",
              "Payment Method_Debit Card                0.000000\n",
              "Shipping Type_Store Pickup               0.000000\n",
              "Shipping Type_Standard                   0.000000\n",
              "Shipping Type_Free Shipping              0.000000\n",
              "Shipping Type_2-Day Shipping             0.000000\n",
              "Season_Winter                            0.000000\n",
              "Season_Summer                            0.000000\n",
              "Season_Spring                            0.000000\n",
              "Discount Applied_Yes                     0.000000"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-e2ef751a-cbee-46b3-9bdd-8697b9e38c8e\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>importance</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>Payment Method_PayPal</th>\n",
              "      <td>0.025144</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Frequency of Purchases_Monthly</th>\n",
              "      <td>0.023889</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Payment Method_Venmo</th>\n",
              "      <td>0.016563</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Shipping Type_Next Day Air</th>\n",
              "      <td>0.015320</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Shipping Type_Express</th>\n",
              "      <td>0.012923</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Discount Applied_No</th>\n",
              "      <td>0.007603</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Frequency of Purchases_Weekly</th>\n",
              "      <td>0.007232</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Season_Fall</th>\n",
              "      <td>0.007122</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Frequency of Purchases_Quarterly</th>\n",
              "      <td>0.006795</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Previous Purchases</th>\n",
              "      <td>0.005654</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Payment Method_Bank Transfer</th>\n",
              "      <td>0.003805</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Payment Method_Credit Card</th>\n",
              "      <td>0.003265</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Frequency of Purchases_Annually</th>\n",
              "      <td>0.003014</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Payment Method_Cash</th>\n",
              "      <td>0.002399</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Review Rating</th>\n",
              "      <td>0.001874</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Frequency of Purchases_Every 3 Months</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Frequency of Purchases_Fortnightly</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Frequency of Purchases_Bi-Weekly</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Age</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Payment Method_Debit Card</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Shipping Type_Store Pickup</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Shipping Type_Standard</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Shipping Type_Free Shipping</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Shipping Type_2-Day Shipping</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Season_Winter</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Season_Summer</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Season_Spring</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Discount Applied_Yes</th>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-e2ef751a-cbee-46b3-9bdd-8697b9e38c8e')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-e2ef751a-cbee-46b3-9bdd-8697b9e38c8e button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-e2ef751a-cbee-46b3-9bdd-8697b9e38c8e');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-9302b1c5-98bb-4022-a093-859c9595736d\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-9302b1c5-98bb-4022-a093-859c9595736d')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-9302b1c5-98bb-4022-a093-859c9595736d button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "  <div id=\"id_ca00158c-e4f4-45be-9554-7818bc2bce26\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('imp_df')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_ca00158c-e4f4-45be-9554-7818bc2bce26 button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('imp_df');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "imp_df",
              "summary": "{\n  \"name\": \"imp_df\",\n  \"rows\": 28,\n  \"fields\": [\n    {\n      \"column\": \"importance\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.007290660552736839,\n        \"min\": 0.0,\n        \"max\": 0.025143962575855383,\n        \"num_unique_values\": 16,\n        \"samples\": [\n          0.025143962575855383,\n          0.023888883559909146,\n          0.007603267389669099\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 30
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Filter the DataFrame to get only the rows where 'importance' is 0\n",
        "zero_importance_features = imp_df.loc[imp_df['importance'] == 0].index.tolist()\n",
        "X_train.drop(zero_importance_features, axis=1, inplace=True)\n",
        "X_test.drop(zero_importance_features, axis=1, inplace=True)\n",
        "zero_importance_features"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.979677Z",
          "iopub.execute_input": "2024-06-26T05:50:09.980249Z",
          "iopub.status.idle": "2024-06-26T05:50:09.995277Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.980202Z",
          "shell.execute_reply": "2024-06-26T05:50:09.993883Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "jf3yAeFHkwpN",
        "outputId": "dbfa1942-b2b2-458b-95ae-1ff2f400e8fa"
      },
      "execution_count": 31,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['Frequency of Purchases_Every 3 Months',\n",
              " 'Frequency of Purchases_Fortnightly',\n",
              " 'Frequency of Purchases_Bi-Weekly',\n",
              " 'Age',\n",
              " 'Payment Method_Debit Card',\n",
              " 'Shipping Type_Store Pickup',\n",
              " 'Shipping Type_Standard',\n",
              " 'Shipping Type_Free Shipping',\n",
              " 'Shipping Type_2-Day Shipping',\n",
              " 'Season_Winter',\n",
              " 'Season_Summer',\n",
              " 'Season_Spring',\n",
              " 'Discount Applied_Yes']"
            ]
          },
          "metadata": {},
          "execution_count": 31
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "So we only keep the features which have considerable impact on our target"
      ],
      "metadata": {
        "id": "_0FAsDIGkwpN"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#63595C;\n",
        "           font-size:110%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: center\">\n",
        "\n",
        "<h1 style=\"padding: 20px;\n",
        "              color:#F0EDEE;\">\n",
        "              5- Classification Modelings\n",
        "</h1>\n",
        "<a class=\"anchor\" id=\"classification\"></a>\n",
        "</div>"
      ],
      "metadata": {
        "id": "d8wBzwaKeSMP"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#6E4555;\n",
        "           font-size:80%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: left\">\n",
        "\n",
        "<h2 style=\"padding: 10px;\n",
        "              color:#F0EDEE;\">\n",
        "              5-1- Logistic Regression\n",
        "</h2>\n",
        "<a class=\"anchor\" id=\"logistic_regression\"></a>\n",
        "</div>"
      ],
      "metadata": {
        "id": "0GHFMrG-kwpU"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "model = LogisticRegression()\n",
        "model.fit(X_train, y_train_encoded)\n",
        "y_pred = model.predict(X_test)"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:09.997184Z",
          "iopub.execute_input": "2024-06-26T05:50:09.997621Z",
          "iopub.status.idle": "2024-06-26T05:50:10.038633Z",
          "shell.execute_reply.started": "2024-06-26T05:50:09.997578Z",
          "shell.execute_reply": "2024-06-26T05:50:10.037263Z"
        },
        "trusted": true,
        "id": "1nozYM4pkwpU"
      },
      "execution_count": 32,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "test_accuracy = accuracy_score(y_test_encoded, y_pred)\n",
        "test_precision = precision_score(y_test_encoded, y_pred)\n",
        "test_recall = recall_score(y_test_encoded, y_pred)\n",
        "test_f1 = f1_score(y_test_encoded, y_pred)\n",
        "\n",
        "print(f\"Test Accuracy: {test_accuracy:.4f}\")\n",
        "print(f\"Test Precision (macro): {test_precision:.4f}\")\n",
        "print(f\"Test Recall (macro): {test_recall:.4f}\")\n",
        "print(f\"Test F1 Score (macro): {test_f1:.4f}\")"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:10.040695Z",
          "iopub.execute_input": "2024-06-26T05:50:10.041533Z",
          "iopub.status.idle": "2024-06-26T05:50:10.06227Z",
          "shell.execute_reply.started": "2024-06-26T05:50:10.041487Z",
          "shell.execute_reply": "2024-06-26T05:50:10.060948Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "PYRpdrCNkwpV",
        "outputId": "feb57f3b-5dcc-432c-81a1-18233995eb76"
      },
      "execution_count": 33,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Test Accuracy: 0.4885\n",
            "Test Precision (macro): 0.5270\n",
            "Test Recall (macro): 0.4881\n",
            "Test F1 Score (macro): 0.5068\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Generate the classification report\n",
        "report = classification_report(y_test_encoded, y_pred)\n",
        "print(\"Classification Report:\\n\", report)\n",
        "\n",
        "# Generate the confusion matrix\n",
        "conf_matrix = confusion_matrix(y_test_encoded, y_pred)\n",
        "print(\"Confusion Matrix:\\n\", conf_matrix)"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:10.064221Z",
          "iopub.execute_input": "2024-06-26T05:50:10.06507Z",
          "iopub.status.idle": "2024-06-26T05:50:10.090599Z",
          "shell.execute_reply.started": "2024-06-26T05:50:10.065024Z",
          "shell.execute_reply": "2024-06-26T05:50:10.089385Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "vXk3HB2UkwpV",
        "outputId": "a68c020e-0708-4455-9f4d-3c20dda50c3a"
      },
      "execution_count": 34,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Classification Report:\n",
            "               precision    recall  f1-score   support\n",
            "\n",
            "           0       0.45      0.49      0.47       360\n",
            "           1       0.53      0.49      0.51       420\n",
            "\n",
            "    accuracy                           0.49       780\n",
            "   macro avg       0.49      0.49      0.49       780\n",
            "weighted avg       0.49      0.49      0.49       780\n",
            "\n",
            "Confusion Matrix:\n",
            " [[176 184]\n",
            " [215 205]]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "sns.heatmap(conf_matrix, annot=True, square=True, fmt='0.0f',\n",
        "            xticklabels=y_test.unique(),\n",
        "            yticklabels=y_test.unique())\n",
        "plt.xlabel('true label')\n",
        "plt.ylabel('predicted label')"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:10.092655Z",
          "iopub.execute_input": "2024-06-26T05:50:10.093592Z",
          "iopub.status.idle": "2024-06-26T05:50:10.475925Z",
          "shell.execute_reply.started": "2024-06-26T05:50:10.093541Z",
          "shell.execute_reply": "2024-06-26T05:50:10.474551Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 472
        },
        "id": "vdAPWP5TkwpW",
        "outputId": "afc848ca-1dc6-43a9-b0c6-4c7eaf8ffd54"
      },
      "execution_count": 35,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Text(77.92222222222227, 0.5, 'predicted label')"
            ]
          },
          "metadata": {},
          "execution_count": 35
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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0uUx/oyMDB07dkyStH//fvn7+ys0NFRBQUFq3LixevTooWHDhmnOnDkqKCjQyJEjdd9995V4BYDEHAAAgFE5aA6APWbPnq3s7GxFR0erZs2a1uOjjz6ytpkzZ45atmypYcOGSZKioqLUsmVLrVmzxtpm6dKlatSokbp27apevXqpU6dOmjfPvmWN7AMAVEDsA4AbXZnsA/DZaw7px7f3aIf0U9YYAgAAGJODJgFWVCQAAABjMvjDgEgAAADGZPAKAJMAAQAwICoAAABjYggAAAADYggAAAAYDRUAAIAxMQQAAIABGTwBYAgAAAADogIAADCmG28nfLuQAAAAjIkhAAAAYDRUAAAAxmTwCgAJAADAmAy+ERAJAADAmAxeAWAOAAAABkQFAABgTCwDBADAgBgCAAAARkMFAABgTAavAJAAAACMyeDLABkCAADAgKgAAAAMyWJmFQAAAMZj8DkADAEAAGBAVAAAAMZk8EmAJAAAAGNiDgAAAAbEHAAAAGA05aICcOnSJfn4+Lg6DACAkRi8AlAuEoDAwEC1bdtWnTt3VnR0tDp06CBfX19XhwUAuJEZ/GmA5WIIYMOGDerRo4d27dqlO++8U1WrVlWnTp307LPPav369a4ODwCAG065SAA6deqk8ePHa926dcrKytLmzZvVoEEDvfzyy+rRo4erwzOkv3dqp1UrFyn9uxQV5v+ofv2627xfmP/jFY9/xo+waderZ1dt3/qpzmcf05nMg/rk4wVl+TGAvxTe9jY9++5ELfzqPa1OX6t23drbvO/j56PhU0dowa5F+s83n+itjW+rx0M9/7K/ie9NvmI/KMfMZsccFVS5GAKQpG+++UZJSUnWIy8vT3369FF0dLSrQzOkSpX8tG/fIS1c9KE+WV78S7t23RY2r3t076L5817VipX/tZ77xz96ae7sl/XchJe0OWmbPDzcddttjZwdOlAiPn4++u7Qt9r40XolzH+22PuPThyqZh2aaeZTr+r0yUy1iGqpES88obOZv+jL9V/atO035E6jV5MrJpYBul7t2rV18eJFRUdHKzo6WuPGjVOzZs1kMplcHZphffG/zfrif5v/8v3MzDM2r/v1666kpO06cSJdkuTu7q6Zr07VuGde0MJFH1rbHT581DkBA3bak5SiPUkpf/l+o4jG2vTxJh3YuV+StG7Z/9T9wZ66tfnfbBKA+uH1defwf+iffUbrvZQlTo8bcJRyMQRQvXp1XbhwQRkZGcrIyFBmZqYuXrzo6rBQQsHBN6lXz656d9EH1nOtWjZVnTo1ZTab9dWX/9MP3+/R2jXv67bbGrowUqDkjqQcVts72iqoRjVJUtPIpqpdv5a+3vK1tY2Xj7f++ea/NPe52co6k+WiSFFqFrNjjgqqXCQAqampysjI0DPPPKO8vDyNHz9eN910kzp06KBnny1emkP5MvDhu3X+fI5Wrvzceq7+zaGSpIkT/qkXE1/XnbGD9GtWtjau/1hVqwa6KFKg5OZNnKMfjv6ghV+9p0+Or9KkxVM1d8IcHfryoLXNkElDdWT3YX25fpcLI0WpmS2OOeyQmJioNm3ayN/fX8HBwYqNjVVaWppNm0uXLikuLk7VqlVT5cqVNWDAAGVmZtq0MZlMxY4PP/xQ9igXQwDS5aWA/fr1U8eOHdWhQwetXr1aH3zwgXbt2qVp06b95XV5eXnKy8uzOWexWBg+KEODB9+nZR+stPn/wc3tcm6ZOP0Nrfz/8wKGDI3X9yd2664BfTT/HUqlKN/6DO6rhi0b6oVHp+r0ydO6rV0TPfb8CJ3N/EV7t+5V2zvaqlmH5hrT80lXh4oKJDk5WXFxcWrTpo0KCws1fvx4devWTYcOHVKlSpUkSWPGjNFnn32m5cuXKyAgQCNHjlT//v21bds2m74WLlxoM1E+MDDQrljKRQKwYsUK6+S/Q4cOKSgoSJ06ddKrr76qzp07X/XaxMRETZkyxeacya2yTO5VnBky/r9OHduqUcMGeuDBx23OZ5w6LUk6fPgb67n8/HydOPG9QkNrl2mMgL28vL300NiBShw+TSmbdkuSvj/ynW4Or6/Y4f21d+teNe3QXCFhIVp24COba8fNTdChLw/puXsTXBE67GBxwQz+L774wub1okWLFBwcrJSUFEVFRSk7O1sLFizQsmXLdPvtt0u6/EXfuHFj7dy5U+3b/77KJDAwUCEhIaWOpVwkACNGjFBUVJSGDx+uzp07q2nTpiW+NiEhQfHx8TbnqlZjpnlZeeSR+7U7Za/27Ttkcz5lzz5dunRJf/vbLdq2/StJkoeHh8LC6ur770+6IlSgxNw93eXp5SnLn8q7RWazTG6Xq4ufvL1c6z9YZ/P+mxtm6d2p7+jLDbarBFBOOWgVwJUq0d7e3vL29r7mtdnZ2ZKkoKAgSVJKSooKCgoUExNjbdOoUSOFhoZqx44dNglAXFychg4dqptvvlkjRozQI488Ylf1u1wkAKdPny71tVf6h0z5//pVquSnBg3qW1/Xrxeq5s1v09mzv+qHH36SJPn7V9ZdA/roX2OnFrv+/PkczZ23RJMmPq2TJ3/S9+m/7xHw8Sdry+ZDAFfh4+ejmvVqWl/XqFtD9cPr63xWjn7+6Yz279ivwc8+qvxL+Tr942k1addEXQbcrnenviNJyjqTdcWJf2d+PKPTP2QWO49yyEET+K5UiZ40aZImT5581evMZrNGjx6tjh07qkmTJpKkjIwMeXl5FSvn16hRQxkZGdbXU6dO1e233y4/Pz+tW7dOTzzxhHJycvTkkyUfkioXCYAkFRUVadWqVTp8+LAkKTw8XHfeeafc3d1dHJkxtY5oro0bPra+fvWVyZKk9xb/R0OGjpEk3XvPnZcnnny06op9jHvmeRUVFmrRwjfk6+ujL7/8Wnd0v0dZWdnODh+4pgbNbtW0/yRaXw+ZNEyStHH5Br3xz9f0ysiXNHDcIMW/8bQqB1bWmZOnteTl9/XFks//qksY1JUq0SX59R8XF6cDBw5o69atdt9zwoQJ1r9btmyp3Nxc/fvf/7YrATBZLK7fvuLYsWPq1auXfvzxRzVseHmZWFpamurWravPPvtMt9xyi139eXgxxowbW++Qlq4OAXCq1enOrxTmTn3QIf1UmrjU7mtGjhyp1atXa8uWLapf//dq66ZNm9S1a1f9+uuvNlWAsLAwjR49WmPGjLlif5999pn69OmjS5culSj5kMrJMsAnn3xSt9xyi3744Qft2bNHe/bsUXp6uurXr29XNgMAQIm5YCtgi8WikSNHauXKldq0aZPNl78kRUREyNPTUxs3brSeS0tLU3p6uiIjI/+y39TUVFWtWrXEX/5SORkCSE5O1s6dO62TICSpWrVqmj59ujp27OjCyAAAcJy4uDgtW7ZMq1evlr+/v3VcPyAgQL6+vgoICNCQIUMUHx+voKAgValSRaNGjVJkZKR1AuCnn36qzMxMtW/fXj4+Plq/fr1efPFFPf3003bFUi4SAG9vb50/f77Y+ZycHHl5ebkgIgDADc8FzwKYPXu2JBV7zs3ChQs1ePBgSdLMmTPl5uamAQMGKC8vT927d9fbb79tbevp6alZs2ZpzJgxslgsatCggWbMmKFhw4bZFUu5mAMwcOBA7dmzRwsWLFDbtm0lSbt27dKwYcMUERGhRYsW2dUfcwBwo2MOAG50ZTIHYMI9Dumn0vP/cUg/Za1czAF44403dMsttygyMlI+Pj7y8fFRhw4d1KBBA7322muuDg8AgBtOuRgCCAwM1OrVq3Xs2DHrMsDGjRurQYMGLo4MAHDD4nHArvHnNZN/tnnz74+inTFjhrPDAQAYjCu2Ai5PXJYAfP3119duJHb1AwDAGVyWAPzxFz4AAGWOIQAAAAyIBAAAAANy0MOAKqpysQwQAACULSoAAABjYggAAADjsRg8AWAIAAAAA6ICAAAwJoNXAEgAAADGZPCdABkCAADAgKgAAACMiSEAAAAMyOAJAEMAAAAYEBUAAIAhWSzGrgCQAAAAjMngQwAkAAAAYzJ4AsAcAAAADIgKAADAkIz+LAASAACAMRk8AWAIAAAAA6ICAAAwJmM/CoAEAABgTEafA8AQAAAABkQFAABgTAavAJAAAACMyeBzABgCAADAgKgAAAAMyeiTAEkAAADGZPAhABIAAIAhUQEogapVq8pkMpWow7Nnz15XQAAAwPlKlAC89tprTg4DAIAyxhDAtQ0aNMjZcQAAUKYsBk8ASrUM8Pjx43ruued0//336/Tp05Kkzz//XAcPHnRocAAA3EgSExPVpk0b+fv7Kzg4WLGxsUpLS7Npc+nSJcXFxalatWqqXLmyBgwYoMzMTJs26enp6t27t/z8/BQcHKx//etfKiwstCsWuxOA5ORkNW3aVLt27dKKFSuUk5MjSdq7d68mTZpkb3cAALiG2UGHHZKTkxUXF6edO3dq/fr1KigoULdu3ZSbm2ttM2bMGH366adavny5kpOT9dNPP6l///7W94uKitS7d2/l5+dr+/bteu+997Ro0SJNnDjRrlhMFovFrmmQkZGRuvvuuxUfHy9/f3/t3btXN998s7788kv1799fJ0+etCsAZ/Dwqu3qEACn6h3S0tUhAE61On2t0+/xc8/ODunnps+TS33tmTNnFBwcrOTkZEVFRSk7O1vVq1fXsmXLdNddd0mSjhw5osaNG2vHjh1q3769Pv/8c/Xp00c//fSTatSoIUmaM2eOxo0bpzNnzsjLy6tE97a7ArB//3794x//KHY+ODhYP//8s73dAQBQoeXl5encuXM2R15eXomuzc7OliQFBQVJklJSUlRQUKCYmBhrm0aNGik0NFQ7duyQJO3YsUNNmza1fvlLUvfu3XXu3Dm7huLtTgACAwN16tSpYue//vpr1a7NL28AQAXhoCGAxMREBQQE2ByJiYnXvr3ZrNGjR6tjx45q0qSJJCkjI0NeXl4KDAy0aVujRg1lZGRY2/zxy/+39397r6Ts3gjovvvu07hx47R8+XKZTCaZzWZt27ZNTz/9tAYOHGhvdwAAuISjVgEkJCQoPj7e5py3t/c1r4uLi9OBAwe0detWxwRiJ7srAC+++KIaNWqkunXrKicnR+Hh4YqKilKHDh303HPPOSNGAAAczmJ2zOHt7a0qVarYHNdKAEaOHKm1a9dq8+bNqlOnjvV8SEiI8vPzlZWVZdM+MzNTISEh1jZ/XhXw2+vf2pSE3QmAl5eX5s+fr+PHj2vt2rVasmSJjhw5ovfff1/u7u72dgcAgGFYLBaNHDlSK1eu1KZNm1S/fn2b9yMiIuTp6amNGzdaz6WlpSk9PV2RkZGSLk/G379/v3UZviStX79eVapUUXh4eIljKfWzAEJDQ1W3bl1JKvE2wQAAlBeu2AgoLi5Oy5Yt0+rVq+Xv728dsw8ICJCvr68CAgI0ZMgQxcfHKygoSFWqVNGoUaMUGRmp9u3bS5K6deum8PBwPfzww3r55ZeVkZGh5557TnFxcSUaevhNqTYCWrBggZo0aSIfHx/5+PioSZMmeuedd0rTFQAArmExOeaww+zZs5Wdna3o6GjVrFnTenz00UfWNjNnzlSfPn00YMAARUVFKSQkRCtWrLC+7+7urrVr18rd3V2RkZF66KGHNHDgQE2dOtWuWOzeB2DixImaMWOGNSORLi9JeOuttzRmzBi7A3AG9gHAjY59AHCjK4t9ADKjox3ST42kJIf0U9bsHgKYPXu25s+fr/vvv996rl+/fmrWrJlGjRpVLhIAAACuxejPArA7ASgoKFDr1q2LnY+IiLB7H2IAAFzFYjb2/DW75wA8/PDDmj17drHz8+bN04MPPuiQoAAAgHOVqALwxw0OTCaT3nnnHa1bt846I3HXrl1KT09nIyAAQIXBEEAJfP311zavIyIiJF1+LLAk3XTTTbrpppt4HDAAoMKw2DmD/0ZTogRg8+bNzo4DAACUoVJvBAQAQEXGEEAp7N69W//5z3+Unp6u/Px8m/f+uFkBAADlFasA7PThhx+qQ4cOOnz4sFauXKmCggIdPHhQmzZtUkBAgDNiBADA4SwWxxwVVameBjhz5kx9+umn8vLy0uuvv64jR47onnvuUWhoqDNiBAAADmZ3AnD8+HH17t1b0uUnA+bm5spkMmnMmDGaN2+ewwMEAMAZLGaTQ46Kyu4EoGrVqjp//rwkqXbt2jpw4IAkKSsrSxcuXHBsdAAAOInREwC7JwFGRUVp/fr1atq0qe6++2499dRT2rRpk9avX6+uXbs6I0YAAOBgdicAb731li5duiRJevbZZ+Xp6ant27drwIABeu655xweIAAAzlCRJ/A5gt0JQFBQkPVvNzc3PfPMMw4NCACAslCRy/eOUKIE4Ny5cyXusEqVKqUOBgAAlI0SJQCBgYEyma6eKVksFplMJhUVFTkkMAAAnIlnAZQAzwIAANxo2Aq4BDp37uzsOAAAQBniYUAAAEMyMwQAAIDxMAcAAAADMvoyQLu3AgYAABUfFQAAgCGxE2AJtGzZ8pr7APxmz5491xUQAABlwehDACVKAGJjY61/X7p0SW+//bbCw8MVGRkpSdq5c6cOHjyoJ554wilBAgAAxypRAjBp0iTr30OHDtWTTz6p559/vlibH374wbHRAQDgJEZfBmj3JMDly5dr4MCBxc4/9NBD+uSTTxwSFAAAzmaxmBxyVFR2JwC+vr7atm1bsfPbtm2Tj4+PQ4ICAADOZfcqgNGjR+vxxx/Xnj171LZtW0nSrl279O6772rChAkODxAAAGdgFYCdnnnmGd188816/fXXtWTJEklS48aNtXDhQt1zzz0ODxAAAGcw+hyAUu0DcM899/BlDwBABVaqnQCzsrL0zjvvaPz48Tp79qyky+v/f/zxR4cGBwCAsxh9EqDdFYB9+/YpJiZGAQEB+u677zR06FAFBQVpxYoVSk9P1+LFi50RJwAADmX0OQB2VwDi4+M1ePBgHT161GbWf69evbRlyxaHBgcAgLOYLSaHHBWV3QnAV199pccee6zY+dq1aysjI8MhQQEAAOeyewjA29tb586dK3b+m2++UfXq1R0S1PW6+NP/uToEwKny5052dQhAhVeRx+8dwe4KQL9+/TR16lQVFBRIkkwmk9LT0zVu3DgNGDDA4QECAOAMrhgC2LJli/r27atatWrJZDJp1apVNu9nZmZq8ODBqlWrlvz8/NSjRw8dPXrUpk10dLRMJpPNMWLECLs/v90JwKuvvqqcnBwFBwfr4sWL6ty5sxo0aCB/f39NmzbN7gAAADCK3NxcNW/eXLNmzSr2nsViUWxsrL799lutXr1aX3/9tcLCwhQTE6Pc3FybtsOGDdOpU6esx8svv2x3LHYPAQQEBGj9+vXatm2b9u7dq5ycHLVq1UoxMTF23xwAAFdxxSKAnj17qmfPnld87+jRo9q5c6cOHDig2267TZI0e/ZshYSE6IMPPtDQoUOtbf38/BQSEnJdsdhdAVi8eLHy8vLUsWNHPfHEExo7dqxiYmKUn5/PEkAAQIXhqCGAvLw8nTt3zubIy8uzO57frvnjCjs3Nzd5e3tr69atNm2XLl2qm266SU2aNFFCQoIuXLhg9/3sTgAeeeQRZWdnFzt//vx5PfLII3YHAABARZaYmKiAgACbIzEx0e5+GjVqpNDQUCUkJOjXX39Vfn6+XnrpJZ08eVKnTp2ytnvggQe0ZMkSbd68WQkJCXr//ff10EMP2X0/u4cALBaLTKbikx5OnjypgIAAuwMAAMAVHLUKICEhQfHx8TbnvL297e7H09NTK1as0JAhQxQUFCR3d3fFxMSoZ8+esvxh16Lhw4db/27atKlq1qyprl276vjx47rllltKfL8SJwAtW7a0zjbs2rWrPDx+v7SoqEgnTpxQjx49SnxjAABcyeygfry9vUv1hX8lERERSk1NVXZ2tvLz81W9enW1a9dOrVu3/str2rVrJ0k6duyYcxKA2NhYSVJqaqq6d++uypUrW9/z8vJSvXr1WAYIAIAD/FZRP3r0qHbv3q3nn3/+L9umpqZKkmrWrGnXPUqcAEyaNEmSVK9ePd13330Oy3YAAHAFi8p+I6CcnBwdO3bM+vrEiRNKTU1VUFCQQkNDtXz5clWvXl2hoaHav3+/nnrqKcXGxqpbt26SpOPHj2vZsmXq1auXqlWrpn379mnMmDGKiopSs2bN7IrF7jkA4eHhSk1NtZYcfrNr1y65u7tftUwBAEB5YXbBOsDdu3erS5cu1te/zR0YNGiQFi1apFOnTik+Pl6ZmZmqWbOmBg4cqAkTJljbe3l5acOGDXrttdeUm5urunXrasCAAXruuefsjsVksdj3PKS2bdtq7Nixuuuuu2zOr1ixQi+99JJ27dpldxCOVvDzt64OAXAqtgLGja7Ss85fVr6pxj0O6ef2zP84pJ+yZvcywEOHDqlVq1bFzrds2VKHDh1ySFAAAMC57E4AvL29lZmZWez8qVOnbFYGAABQnllkcshRUdmdAHTr1k0JCQk2mwFlZWVp/PjxuuOOOxwaHAAAzmJ20FFR2f2T/ZVXXlFUVJTCwsLUsmVLSZeXINSoUUPvv/++wwMEAACOZ3cCULt2be3bt09Lly7V3r175evrq0ceeUT333+/PD09nREjAAAOV5HL945QqkH7SpUq2WxFCABARVORy/eOUKIEYM2aNerZs6c8PT21Zs2aq7bt16+fQwIDAADOU6IEIDY2VhkZGQoODrZuCXwlJpNJRUVFjooNAACnoQJQAmaz+Yp/AwBQURl9DoDdywABAEDFV6IKwBtvvFHiDp988slSBwMAQFkxG7sAULIEYObMmTavz5w5owsXLigwMFDS5Y2A/Pz8FBwcTAIAAKgQzAwBXNuJEyesx7Rp09SiRQsdPnxYZ8+e1dmzZ3X48GG1atXqqs8rBgCgPLE46Kio7J4DMGHCBL355ptq2LCh9VzDhg01c+bMUj2OEAAAlD27NwI6deqUCgsLi50vKiq64kOCAAAoj4y+ps3uCkDXrl312GOPac+ePdZzKSkpevzxxxUTE+PQ4AAAcBazyeSQo6KyOwF49913FRISotatW8vb21ve3t5q27atatSooXfeeccZMQIAAAezewigevXq+u9//6tvvvlGR44ckSQ1atRIf/vb3xweHAAAzlKRJ/A5QqkeBiRJ9erVk8Vi0S233CIPj1J3AwCASzAHwE4XLlzQkCFD5Ofnp9tuu03p6emSpFGjRmn69OkODxAAADie3QlAQkKC9u7dq6SkJPn4+FjPx8TE6KOPPnJocAAAOIvZ5JijorK7dr9q1Sp99NFHat++vUx/mP1422236fjx4w4NDgAAZ2EnQDudOXNGwcHBxc7n5ubaJAQAAKD8sjsBaN26tT777DPr69++9N955x1FRkY6LjIAAJzI6FsB2z0E8OKLL6pnz546dOiQCgsL9frrr+vQoUPavn27kpOTnREjAAAOV5HH7x3B7gpAp06dtHfvXhUWFqpp06Zat26dgoODtWPHDkVERDgjRgAAHM7soKOisqsCUFBQoMcee0wTJkzQ/PnznRUTAABwMrsqAJ6envrkk0+cFQsAAGXG6HMA7B4CiI2N1apVq5wQCgAAZYd9AOx06623aurUqdq2bZsiIiJUqVIlm/effPJJhwUHAACcw+4EYMGCBQoMDFRKSopSUlJs3jOZTCQAAIAKoSJP4HMEuxOAEydOOCMOAADKlNETALvnAPyRxWKRxVKRp0AAAGBMpUoAFixYoCZNmsjHx0c+Pj5q0qSJ3nnnHUfHBgCA01hMjjkqKruHACZOnKgZM2Zo1KhR1q1/d+zYoTFjxig9PV1Tp051eJAAADia0YcA7E4AZs+erfnz5+v++++3nuvXr5+aNWumUaNGkQAAAFAB2D0EUFBQoNatWxc7HxERocLCQocEBQCAs7liK+AtW7aob9++qlWrlkwmU7F9dTIzMzV48GDVqlVLfn5+6tGjh44ePWrT5tKlS4qLi1O1atVUuXJlDRgwQJmZmXZGUooE4OGHH9bs2bOLnZ83b54efPBBuwMAAMAVXLETYG5urpo3b65Zs2YVj8diUWxsrL799lutXr1aX3/9tcLCwhQTE6Pc3FxruzFjxujTTz/V8uXLlZycrJ9++kn9+/e3M5JSDAFIlycBrlu3Tu3bt5ck7dq1S+np6Ro4cKDi4+Ot7WbMmFGa7gEAcDpX7OLXs2dP9ezZ84rvHT16VDt37tSBAwd02223Sbo87B4SEqIPPvhAQ4cOVXZ2thYsWKBly5bp9ttvlyQtXLhQjRs31s6dO63fyyVhdwJw4MABtWrVSpJ0/PhxSdJNN92km266SQcOHLC2M5kq8NRIAABKKC8vT3l5eTbnvL295e3tbXc/kuTj42M95+bmJm9vb23dulVDhw5VSkqKCgoKFBMTY23TqFEjhYaGaseOHc5NADZv3mzvJQAAlDuOWgWQmJioKVOm2JybNGmSJk+ebFc/v32RJyQkaO7cuapUqZJmzpypkydP6tSpU5KkjIwMeXl5KTAw0ObaGjVqKCMjw677lWoIAACAis5RCUBCQoLN8Lcku3/9S5efuLtixQoNGTJEQUFBcnd3V0xMjHr27OmUTfdIAAAAuA6lKff/lYiICKWmpio7O1v5+fmqXr262rVrZ119FxISovz8fGVlZdlUATIzMxUSEmLXva5rK2AAACoqV6wCKKmAgABVr15dR48e1e7du3XnnXdKupwgeHp6auPGjda2aWlpSk9Pt27OV1JUAAAAhuSKVQA5OTk6duyY9fWJEyeUmpqqoKAghYaGavny5apevbpCQ0O1f/9+PfXUU4qNjVW3bt0kXU4MhgwZovj4eAUFBalKlSrWnXntmQAokQAAAFBmdu/erS5dulhf/zZ3YNCgQVq0aJFOnTql+Ph4ZWZmqmbNmho4cKAmTJhg08fMmTPl5uamAQMGKC8vT927d9fbb79tdywmyw34OL+Cn791dQiAU+XPnezqEACnqvTsYqffY3rYQw7p55nvlzikn7JGBQAAYEg33K9fOzEJEAAAA6ICAAAwJLPBawAkAAAAQ3LURkAVFQkAAMCQjP37nzkAAAAYEhUAAIAhMQQAAIABuWInwPKEIQAAAAyICgAAwJBYBggAgAEZ++ufIQAAAAyJCgAAwJBYBQAAgAEZfQ4AQwAAABgQFQAAgCEZ+/c/CQAAwKCYAwAAgAExBwAAABgOFQAAgCEZ+/c/CQAAwKCMPgeAIQAAAAyoXFUA8vPzdfr0aZnNtnlZaGioiyICANyoLAYfBCgXCcDRo0f16KOPavv27TbnLRaLTCaTioqKXBQZAOBGZfQhgHKRAAwePFgeHh5au3atatasKZPJ5OqQAAC4oZWLBCA1NVUpKSlq1KiRq0MBABiE0fcBKBcJQHh4uH7++WdXhwEAMBBjf/27cBXAuXPnrMdLL72ksWPHKikpSb/88ovNe+fOnXNViAAA3LBcVgEIDAy0Geu3WCzq2rWrTRsmAbrG/MUfaUPyNp34/qR8vL3Uomm4xjz+qOqH1bG2Wb76v/psfZIOpx1T7oWL2v7FclXxr2zTT7cBg/RTxmmbc6NHPKKhD99TJp8D+CueHfrIvWFruVWrKRUWqOjkUeVv+kiWsxm/N3L3lFfM/fIIby95eKjo2/3K++I9Kff3HyWVnl1crO9LK2ep6NCusvgYuE4MAbjI5s2bXXVrXMPu1P26v39fNWn8NxUWFen1uYs0fMyzWr10rvx8fSRJly7lqVO71urUrrVem7PwL/saOfRh3dWvh/W1n5+f0+MHrsUttJEKUzao6KcTMrm5ybPL3fJ5YKwuzn1GKsiXJHnd8YDcG7TQpRVvSnkX5dV9oHwGPKlLi1+w6Svv03kqOr7f+tpy6UKZfhaUHqsAXKRz586uujWuYe4M2//ATXs2XlF97tehtKNq3aKpJOnhe/8hSfpyz76r9lXJz1c3VQtyTqBAKeV9+Ir1b4ukvE/nq9KYWXILqS/zD2mSt688WnRW3qrZMn9/+PI1a+fLb8RLcqt1i8w/Hf/9+ksXZMnNLuuPAAdgH4ByYN++K3+JmEwm+fj4KDQ0VN7e3mUcFX6Tk3v5F01AFX+7r31nyXLNWfSBataorl53dNHAe/8hDw93R4cIXBeTt68kyXIpR5LkFlJPJncPFZ04aG1j+eWUzNk/y61OA5sEwKvHQJl6D5E567QK92xW4d4tZRs8UErlIgFo0aLFVdf+e3p66t5779XcuXPl4+Nj815eXp7y8vJszrnl5ZEwOIjZbNb01+eqZbNw3XpzPbuuffDuO9X4bw0UUMVfqfsP6fW5i/TzL2c19snhzgkWKBWTvO54SEU/fCPLmR8vn6kcKEthgZRnW8635GbLVCnA+jo/+RMVfXdIKsiX+81N5NVjoOTprcLd68v0E6B0jD4EUC6eBbBy5UrdeuutmjdvnlJTU5Wamqp58+apYcOGWrZsmRYsWKBNmzbpueeeK3ZtYmKiAgICbI6XXp/jgk9xY3rh1Vk69u13+veUZ+y+dtB9/dW2VTM1bFBf9/6jt54eOVTLPl6j/Px8J0QKlI5Xj4Fyq15beStn2X1twdbVMp88KnPm9yrY8ZkKdvxXnpG9nBAlnMHioP9VVOWiAjBt2jS9/vrr6t69u/Vc06ZNVadOHU2YMEFffvmlKlWqpH/+85965ZVXbK5NSEhQfHy8zTm38z+WSdw3ummvvq3k7V/qvVn/Vkhw9evur1l4IxUWFenHU6dtVhQAruLV/WG539pClxZPk+X8r9bzlpwsmTw8JW8/myqAqVLAVcf7zT8dl9vfYyV3D6mo0JmhA9etXCQA+/fvV1hYWLHzYWFh2r//8uzaFi1a6NSpU8XaeHt7Fyv3F+SzqdD1sFgsenHGbG3csl0L33pJdWqFOKTfI0ePy83NTUFVA67dGHAyr+4Py71hhC69nyhLtu1/M8wZ38lSVCj3euEqStstSTIFhcgt4CaZTx77yz7daoTKcjGHL/8KgiGAcqBRo0aaPn26TWm4oKBA06dPt24P/OOPP6pGjRquCtFQXnh1ltau26SXJo9VJT9f/fzLWf38y1ld+sNci59/Oasj3xxX+smfJElHj3+nI98cV/a585Kk1AOH9f5HK3Xk6Lf64cdTWvu/TXr5jXnq061LqSYTAo7k1WOQPJp0UN6q2VL+JZkqBVwe2/fwvNwg76IKU5PldccDcgtrLLeQevLuO0xFJ49aJwC639pCHi06y1S9tkxVg+XR6nZ5duinAsb/KwyzxeKQwx5btmxR3759VatWLZlMJq1atcrm/ZycHI0cOVJ16tSRr6+vwsPDNWeO7bB2dHS0TCaTzTFixAi7P3+5qADMmjVL/fr1U506ddSsWTNJl6sCRUVFWrt2rSTp22+/1RNPPOHKMA3jo5WfSZIeGTnO5vwL4+MV2/uOy21W/Vez311qfW9Q3L9s2nh5eurzDcl6+92lys8vUO1aNfTwvf/QoPv+UUafAvhrnhGXNx3zffhZm/N5n85T4b6tkqT89cvkZbHIZ8Aoyd1TRd/uV/4X7/3euKhIHhEx8op5QDKZZP41U/kblqnw66Sy+hiogHJzc9W8eXM9+uij6t+/f7H34+PjtWnTJi1ZskT16tXTunXr9MQTT6hWrVrq16+ftd2wYcM0depU6+vS7LFisljsTF+c5Pz581q6dKm++eYbSVLDhg31wAMPyN/f/l+LBT9/6+jwgHIlf+5kV4cAONWVdll0tIfCin8Bl8aS71eU6jqTyaSVK1cqNjbWeq5Jkya69957NWHCBOu5iIgI9ezZUy+8cHmPlujoaLVo0UKvvfba9YRdPioAkuTv71+qEgYAAKXhqK2Ar7Qc/Urz00qiQ4cOWrNmjR599FHVqlVLSUlJ+uabbzRz5kybdkuXLtWSJUsUEhKivn37asKECXZXAVyWAKxZs0Y9e/aUp6en1qxZc9W2fyx7AABQniQmJmrKlCk25yZNmqTJkyfb3debb76p4cOHq06dOvLw8JCbm5vmz5+vqKgoa5sHHnhAYWFhqlWrlvbt26dx48YpLS1NK1bYV4lwWQIQGxurjIwMBQcH25Q//oyHAQEAnMFRa/ivtBy9tJvRvfnmm9q5c6fWrFmjsLAwbdmyRXFxcapVq5ZiYmIkScOH/76ZWtOmTVWzZk117dpVx48f1y233FLie7ksATCbzVf8GwCAsuCob57Slvv/7OLFixo/frxWrlyp3r17S5KaNWum1NRUvfLKK9YE4M/atWsnSTp27FjFSAD+bOPGjdq4caNOnz5tkxCYTCYtWLDAhZEBAG5E5e1xwAUFBSooKJCbm+0KfXd396v+UE5NTZUk1axZ0677lYsEYMqUKZo6dapat26tmjVrXvW5AAAAVFQ5OTk6duz3zaROnDih1NRUBQUFKTQ0VJ07d9a//vUv+fr6KiwsTMnJyVq8eLFmzJghSTp+/LiWLVumXr16qVq1atq3b5/GjBmjqKgo6zL6kioXCcCcOXO0aNEiPfzww64OBQBgEK7Yx3/37t3q0qWL9fVvcwcGDRqkRYsW6cMPP1RCQoIefPBBnT17VmFhYZo2bZp1lZyXl5c2bNig1157Tbm5uapbt64GDBhwxWflXEu5SADy8/PVoUMHV4cBADAQV8w+i46O1tW23wkJCdHChQv/8v26desqOTnZIbGUi62Ahw4dqmXLlrk6DAAADMNlFYA/Lpkwm82aN2+eNmzYoGbNmsnT09Om7W9jHwAAOEo52QjXZVyWAHz99dc2r1u0aCFJOnDggM15JgQCAJyhvK0CKGsuSwA2b97sqlsDAGB45WISIAAAZc3oW9CRAAAADMkVywDLk3KxCgAAAJQtKgAAAENiEiAAAAbEMkAAAAzI6JMAmQMAAIABUQEAABiS0VcBkAAAAAzJ6JMAGQIAAMCAqAAAAAyJVQAAABgQQwAAAMBwqAAAAAyJVQAAABiQ2eBzABgCAADAgKgAAAAMydi//0kAAAAGZfRVACQAAABDMnoCwBwAAAAMiAoAAMCQ2AkQAAADYggAAAAYDhUAAIAhsRMgAAAGZPQ5AAwBAABgQFQAAACGZPRJgCQAAABDYggAAAAYDhUAAIAhMQQAAIABsQwQAAADMjMHAAAAGA0JAADAkCwO+p89tmzZor59+6pWrVoymUxatWqVzfs5OTkaOXKk6tSpI19fX4WHh2vOnDk2bS5duqS4uDhVq1ZNlStX1oABA5SZmWn35ycBAAAYktlicchhj9zcXDVv3lyzZs264vvx8fH64osvtGTJEh0+fFijR4/WyJEjtWbNGmubMWPG6NNPP9Xy5cuVnJysn376Sf3797f78zMHAACAMtKzZ0/17NnzL9/fvn27Bg0apOjoaEnS8OHDNXfuXH355Zfq16+fsrOztWDBAi1btky33367JGnhwoVq3Lixdu7cqfbt25c4FioAAABDctQQQF5ens6dO2dz5OXllSqmDh06aM2aNfrxxx9lsVi0efNmffPNN+rWrZskKSUlRQUFBYqJibFe06hRI4WGhmrHjh123YsEAABgSI4aAkhMTFRAQIDNkZiYWKqY3nzzTYWHh6tOnTry8vJSjx49NGvWLEVFRUmSMjIy5OXlpcDAQJvratSooYyMDLvuxRAAAADXISEhQfHx8TbnvL29S9XXm2++qZ07d2rNmjUKCwvTli1bFBcXp1q1atn86ncEEgAAgCE5aiMgb2/vUn/h/9HFixc1fvx4rVy5Ur1795YkNWvWTKmpqXrllVcUExOjkJAQ5efnKysry6YKkJmZqZCQELvuxxAAAMCQXLEK4GoKCgpUUFAgNzfbr2Z3d3eZzWZJUkREhDw9PbVx40br+2lpaUpPT1dkZKRd96MCAABAGcnJydGxY8esr0+cOKHU1FQFBQUpNDRUnTt31r/+9S/5+voqLCxMycnJWrx4sWbMmCFJCggI0JAhQxQfH6+goCBVqVJFo0aNUmRkpF0rACQSAACAQbniWQC7d+9Wly5drK9/mzswaNAgLVq0SB9++KESEhL04IMP6uzZswoLC9O0adM0YsQI6zUzZ86Um5ubBgwYoLy8PHXv3l1vv/223bGYLDfgA5ELfv7W1SEATpU/d7KrQwCcqtKzi51+j/rVmjuknxO/7HVIP2WNCgAAwJCM/jhgJgECAGBAVAAAAIZ0A46A24UEAABgSAwBAAAAw6ECAAAwJIYAAAAwIEfu4lcRMQQAAIABUQEAABiSK3YCLE9IAAAAhmT0OQAMAQAAYEBUAAAAhmT0fQBIAAAAhmT0IQASAACAIbEMEAAAGA4VAACAITEEAACAARl9EiBDAAAAGBAVAACAITEEAACAAbEKAAAAGA4VAACAIfEwIAAADIghAAAAYDhUAAAAhsQqAAAADIg5AAAAGJDRKwDMAQAAwICoAAAADMnoFQASAACAIRn7658hAAAADMlkMXoNBNctLy9PiYmJSkhIkLe3t6vDARyKf79xoyIBwHU7d+6cAgIClJ2drSpVqrg6HMCh+PcbNyqGAAAAMCASAAAADIgEAAAAAyIBwHXz9vbWpEmTmCCFGxL/fuNGxSRAAAAMiAoAAAAGRAIAAIABkQAAAGBAJAD4S9HR0Ro9erSrwwAc6lr/XptMJq1atarE/SUlJclkMikrK+u6YwPKEg8DAoA/OHXqlKpWrerqMACnIwEAgD8ICQlxdQhAmWAIACXy66+/auDAgapatar8/PzUs2dPHT16VNLlZ2pXr15dH3/8sbV9ixYtVLNmTevrrVu3ytvbWxcuXCjz2IE/M5vNGjt2rIKCghQSEqLJkydb3/vzEMD27dvVokUL+fj4qHXr1lq1apVMJpNSU1Nt+kxJSVHr1q3l5+enDh06KC0trWw+DFBKJAAokcGDB2v37t1as2aNduzYIYvFol69eqmgoEAmk0lRUVFKSkqSdDlZOHz4sC5evKgjR45IkpKTk9WmTRv5+fm58FMAl7333nuqVKmSdu3apZdffllTp07V+vXri7U7d+6c+vbtq6ZNm2rPnj16/vnnNW7cuCv2+eyzz+rVV1/V7t275eHhoUcffdTZHwO4LgwB4JqOHj2qNWvWaNu2berQoYMkaenSpapbt65WrVqlu+++W9HR0Zo7d64kacuWLWrZsqVCQkKUlJSkRo0aKSkpSZ07d3blxwCsmjVrpkmTJkmSbr31Vr311lvauHGj7rjjDpt2y5Ytk8lk0vz58+Xj46Pw8HD9+OOPGjZsWLE+p02bZv13/JlnnlHv3r116dIl+fj4OP8DAaVABQDXdPjwYXl4eKhdu3bWc9WqVVPDhg11+PBhSVLnzp116NAhnTlzRsnJyYqOjlZ0dLSSkpJUUFCg7du3Kzo62kWfALDVrFkzm9c1a9bU6dOni7VLS0tTs2bNbL7E27Zte80+fxv+ulKfQHlBAgCHaNq0qYKCgpScnGyTACQnJ+urr75SQUGBtXoAuJqnp6fNa5PJJLPZ7LA+TSaTJF13n4AzkQDgmho3bqzCwkLt2rXLeu6XX35RWlqawsPDJV3+D97f//53rV69WgcPHlSnTp3UrFkz5eXlae7cuWrdurUqVarkqo8AlErDhg21f/9+5eXlWc999dVXLowIcBwSAFzTrbfeqjvvvFPDhg3T1q1btXfvXj300EOqXbu27rzzTmu76OhoffDBB2rRooUqV64sNzc3RUVFaenSpYz/o0J64IEHZDabNXz4cB0+fFj/+9//9Morr0j6/Vc+UFGRAKBEFi5cqIiICPXp00eRkZGyWCz673//a1P27Ny5s4qKimzG+qOjo4udAyqKKlWq6NNPP1VqaqpatGihZ599VhMnTpQkJvehwuNxwABgh6VLl+qRRx5Rdna2fH19XR0OUGosAwSAq1i8eLFuvvlm1a5dW3v37tW4ceN0zz338OWPCo8EAACuIiMjQxMnTlRGRoZq1qypu+++W9OmTXN1WMB1YwgAAAADYhIgAAAGRAIAAIABkQAAAGBAJAAAABgQCQBQQdWrV0+vvfZaidsvWrRIgYGB131fk8mkVatWXXc/AFyLBAAohejoaI0ePdrVYQBAqZEAAE5isVhUWFjo6jAA4IpIAAA7DR48WMnJyXr99ddlMplkMpn03XffKSkpSSaTSZ9//rkiIiLk7e2trVu3avDgwYqNjbXpY/To0TbPRzCbzUpMTFT9+vXl6+ur5s2b6+OPP7YrrhkzZqhp06aqVKmS6tatqyeeeEI5OTnF2q1atUq33nqrfHx81L17d/3www82769evVqtWrWSj4+Pbr75Zk2ZMoVEBrgBkQAAdnr99dcVGRmpYcOG6dSpUzp16pTq1q1rff+ZZ57R9OnTdfjwYTVr1qxEfSYmJmrx4sWaM2eODh48qDFjxuihhx5ScnJyieNyc3PTG2+8oYMHD+q9997Tpk2bNHbsWJs2Fy5c0LRp07R48WJt27ZNWVlZuu+++6zv/9///Z8GDhyop556SocOHdLcuXO1aNEidr4DbkBsBQzYKSAgQF5eXvLz81NISEix96dOnao77rijxP3l5eXpxRdf1IYNGxQZGSlJuvnmm7V161bNnTu3xI9S/uOchHr16umFF17QiBEj9Pbbb1vPFxQU6K233lK7du0kSe+9954aN26sL7/8Um3bttWUKVP0zDPPaNCgQdY4nn/+eY0dO1aTJk0q8WcCUP6RAAAO1rp1a7vaHzt2TBcuXCiWNOTn56tly5Yl7mfDhg1KTEzUkSNHdO7cORUWFurSpUu6cOGC/Pz8JEkeHh5q06aN9ZpGjRopMDBQhw8fVtu2bbV3715t27bN5hd/UVFRsX4AVHwkAICDVapUyea1m5ub/vzIjYKCAuvfv43Tf/bZZ6pdu7ZNO29v7xLd87vvvlOfPn30+OOPa9q0aQoKCtLWrVs1ZMgQ5efnl/iLOycnR1OmTFH//v2Lvefj41OiPgBUDCQAQCl4eXmpqKioRG2rV6+uAwcO2JxLTU2Vp6enJCk8PFze3t5KT08vcbn/z1JSUmQ2m/Xqq6/Kze3y1J7//Oc/xdoVFhZq9+7datu2rSQpLS1NWVlZaty4sSSpVatWSktLU4MGDUoVB4CKgwQAKIV69epp165d+u6771S5cmUFBQX9Zdvbb79d//73v7V48WJFRkZqyZIlOnDggLW87+/vr6efflpjxoyR2WxWp06dlJ2drW3btqlKlSrW8firadCggQoKCvTmm2+qb9++2rZtm+bMmVOsnaenp0aNGqU33nhDHh4eGjlypNq3b29NCCZOnKg+ffooNDRUd911l9zc3LR3714dOHBAL7zwQin/aQEoj1gFAJTC008/LXd3d4WHh6t69epKT0//y7bdu3fXhAkTNHbsWLVp00bnz5/XwIEDbdo8//zzmjBhghITE9W4cWP16NFDn332merXr1+ieJo3b64ZM2bopZdeUpMmTbR06VIlJiYWa+fn56dx48bpgQceUMeOHVW5cmV99NFHNrGuXbtW69atU5s2bdS+fXvNnDlTYWFhJfwnA6CiMFn+PDgJAABueFQAAAAwIBIAAAAMiAQAAAADIgEAAMCASAAAADAgEgAAAAyIBAAAAAMiAQAAwIBIAAAAMCASAAAADIgEAAAAAyIBAADAgP4f28etZmUC+2AAAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#6E4555;\n",
        "           font-size:80%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: left\">\n",
        "\n",
        "<h2 style=\"padding: 10px;\n",
        "              color:#F0EDEE;\">\n",
        "              5-2- SVC\n",
        "</h2>\n",
        "<a class=\"anchor\" id=\"svc\"></a>\n",
        "</div>"
      ],
      "metadata": {
        "id": "2wxsVs2kkwpW"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Combining GridSearchCV with cross-validation is a great approach for tuning hyperparameters while evaluating model performance. GridSearchCV inherently uses cross-validation to find the best hyperparameters from a given set of options. Here’s how you can do it with an SVC model:\n",
        "\n",
        "1. Define the parameter grid: Specify the parameters and their respective values you want to search over.\n",
        "2. Instantiate the GridSearchCV object: Include the model, parameter grid, and cross-validation strategy.\n",
        "3. Fit the GridSearchCV object: Train the model and find the best parameters."
      ],
      "metadata": {
        "id": "hD8xpWKWkwpW"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Define the parameter grid\n",
        "param_grid = {\n",
        "    'C': [0.01, 0.1, 1, 10, 100],\n",
        "    'gamma': [1, 0.1, 0.01, 0.001],\n",
        "    'kernel': ['rbf', 'linear']\n",
        "}\n",
        "\n",
        "# Define the model\n",
        "svc = SVC()\n",
        "\n",
        "# Define the cross-validation strategy\n",
        "cv = KFold(n_splits=5, shuffle=True, random_state=42)\n",
        "# Change scoring to a list of strings\n",
        "scoring = ['accuracy', 'precision_macro', 'recall_macro', 'f1_macro']\n",
        "\n",
        "# Instantiate the GridSearchCV object\n",
        "grid_search = GridSearchCV(estimator=svc, param_grid=param_grid, cv=cv, n_jobs=-1, scoring=scoring, refit='accuracy')\n",
        "\n",
        "# Fit the GridSearchCV object\n",
        "grid_search.fit(X_train, y_train_encoded)\n",
        "\n",
        "# Get the best estimator\n",
        "best_model = grid_search.best_estimator_"
      ],
      "metadata": {
        "_kg_hide-input": false,
        "_kg_hide-output": true,
        "execution": {
          "iopub.status.busy": "2024-06-26T05:50:10.480316Z",
          "iopub.execute_input": "2024-06-26T05:50:10.480931Z",
          "iopub.status.idle": "2024-06-26T05:51:05.527195Z",
          "shell.execute_reply.started": "2024-06-26T05:50:10.480892Z",
          "shell.execute_reply": "2024-06-26T05:51:05.525991Z"
        },
        "trusted": true,
        "id": "046T41mnkwpX"
      },
      "execution_count": 37,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Explanation:** <br>\n",
        "1. Parameter Grid (param_grid):\n",
        "\n",
        " *  Define a dictionary where keys are the parameter names and values are lists of parameter settings to try. For SVC, common parameters to tune include C, gamma, and kernel.\n",
        "2. Cross-Validation Strategy (cv):\n",
        "\n",
        " * KFold is used here to split the data into 5 folds with shuffling and a fixed random state for reproducibility.\n",
        "3. GridSearchCV:\n",
        "\n",
        " * estimator: The base model (SVC in this case).\n",
        " * param_grid: The parameter grid defined earlier.\n",
        " * cv: Cross-validation strategy.\n",
        " * n_jobs: Number of jobs to run in parallel. -1 uses all available processors.\n",
        " * scoring: The scoring metric to evaluate the predictions on the test set. it is set to the dictionary of metrics.\n",
        " * refit='accuracy' ensures that the model is refit using the parameter setting that maximizes the accuracy score after the grid search is completed. You can change this to any other metric if you want to refit based on a different metric.\n",
        "4. Fitting the GridSearchCV:\n",
        "\n",
        " * The fit method runs the grid search and fits the model with the best parameters found.\n",
        "5. Best Estimator:\n",
        "\n",
        " * best_model retrieves the best model found by GridSearchCV."
      ],
      "metadata": {
        "id": "1f3JTVbxkwpX"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "y_pred = best_model.predict(X_test)\n",
        "\n",
        "test_accuracy = accuracy_score(y_test_encoded, y_pred)\n",
        "test_precision = precision_score(y_test_encoded, y_pred)\n",
        "test_recall = recall_score(y_test_encoded, y_pred)\n",
        "test_f1 = f1_score(y_test_encoded, y_pred)\n",
        "\n",
        "print(f\"Test Accuracy: {test_accuracy:.4f}\")\n",
        "print(f\"Test Precision (macro): {test_precision:.4f}\")\n",
        "print(f\"Test Recall (macro): {test_recall:.4f}\")\n",
        "print(f\"Test F1 Score (macro): {test_f1:.4f}\")"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:51:05.529135Z",
          "iopub.execute_input": "2024-06-26T05:51:05.529607Z",
          "iopub.status.idle": "2024-06-26T05:51:05.683933Z",
          "shell.execute_reply.started": "2024-06-26T05:51:05.529556Z",
          "shell.execute_reply": "2024-06-26T05:51:05.682666Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "lUaNoW-FkwpY",
        "outputId": "89dcd467-7973-4e3b-9ab1-cf3f6ef59c48"
      },
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Test Accuracy: 0.4821\n",
            "Test Precision (macro): 0.5190\n",
            "Test Recall (macro): 0.5214\n",
            "Test F1 Score (macro): 0.5202\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Generate the classification report\n",
        "report = classification_report(y_test_encoded, y_pred)\n",
        "print(\"Classification Report:\\n\", report)\n",
        "\n",
        "# Generate the confusion matrix\n",
        "conf_matrix = confusion_matrix(y_test_encoded, y_pred)\n",
        "print(\"Confusion Matrix:\\n\", conf_matrix)"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:51:05.685802Z",
          "iopub.execute_input": "2024-06-26T05:51:05.686277Z",
          "iopub.status.idle": "2024-06-26T05:51:05.707097Z",
          "shell.execute_reply.started": "2024-06-26T05:51:05.686234Z",
          "shell.execute_reply": "2024-06-26T05:51:05.705533Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Ankcgw5EkwpY",
        "outputId": "88ac2f92-7cb2-4ac3-aa84-4e3552977e7f"
      },
      "execution_count": 39,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Classification Report:\n",
            "               precision    recall  f1-score   support\n",
            "\n",
            "           0       0.44      0.44      0.44       360\n",
            "           1       0.52      0.52      0.52       420\n",
            "\n",
            "    accuracy                           0.48       780\n",
            "   macro avg       0.48      0.48      0.48       780\n",
            "weighted avg       0.48      0.48      0.48       780\n",
            "\n",
            "Confusion Matrix:\n",
            " [[157 203]\n",
            " [201 219]]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "sns.heatmap(conf_matrix, annot=True, square=True, fmt='0.0f',\n",
        "            xticklabels=y_test.unique(),\n",
        "            yticklabels=y_test.unique())\n",
        "plt.xlabel('true label')\n",
        "plt.ylabel('predicted label')"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:51:05.708953Z",
          "iopub.execute_input": "2024-06-26T05:51:05.709339Z",
          "iopub.status.idle": "2024-06-26T05:51:06.057553Z",
          "shell.execute_reply.started": "2024-06-26T05:51:05.709304Z",
          "shell.execute_reply": "2024-06-26T05:51:06.056227Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 466
        },
        "id": "agx6ccsQkwpY",
        "outputId": "a8e892d4-9333-48f8-aeac-ed3b9620ebff"
      },
      "execution_count": 40,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Text(77.92222222222227, 0.5, 'predicted label')"
            ]
          },
          "metadata": {},
          "execution_count": 40
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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TXl7eys8PNyhvWXLltq5c6ckKTQ0VHl5ecrIyHCYBUhPT1doaKhT70cJAABgSFbZXHK5iq+vrzp06KCUFMdFhSdOnFDDhg0lSREREfLx8dGWLVvsz6ekpCg1NVVRUVFOvR8zAAAAlJLs7GydOnXK/vjMmTNKSkpScHCwwsLC9Oyzz+rBBx9U9+7d1bNnT33++edav369tm/fLkkKDAzUiBEjFBcXp+DgYFWrVk1jxoxRVFSUUzsAJBIAAIBBeWIX/P79+9WzZ0/742trB4YNG6bFixfr3nvv1fz58xUfH6+xY8eqefPm+te//qVu3brZXzN79mx5eXlp8ODBslgs6tu3r+bOnet0LJwDAJRDnAOAiq40zgGo4t/YJeNk55xxyTiljTUAAAAYECUAAIAhGf1mQCQAAABDsla8CrhTKAEAAGBAzAAAAAypAq6BdwoJAADAkFgDAACAARl9BoA1AAAAGBAzAAAAQzL6DAAJAADAkIz99U8JAAAAQ6qQ9wJA6bJYLIqPj9fEiRNdck9soCzh329UVCQAuGlZWVkKDAxUZmamqlWr5ulwAJfi329UVJQAAAAwIBIAAAAMiAQAAAADIgHATTObzZo6dSoLpFAh8e83KioWAQIAYEDMAAAAYEAkAAAAGBAJAAAABkQCgN8UHR2tcePGeToMwKVu9O+1yWTSmjVrij3e9u3bZTKZlJGRcdOxAaWJmwEBwC+cP39e1atX93QYgNuRAADAL4SGhno6BKBUUAJAsfz0008aOnSoqlevLn9/f/Xv318nT56UdPWe2rVq1dInn3xi79+uXTvVqVPH/njnzp0ym83Kyckp9diBX7NarXruuecUHBys0NBQ/fWvf7U/9+sSwO7du9WuXTv5+fkpMjJSa9askclkUlJSksOYBw4cUGRkpPz9/dWlSxelpKSUzocBSogEAMUyfPhw7d+/X+vWrdOePXtks9l05513Kj8/XyaTSd27d9f27dslXU0WkpOTdeXKFR0/flySlJCQoA4dOsjf39+DnwK4asmSJQoICFBiYqL+9re/adq0adq8eXORfllZWRowYIBat26tgwcP6uWXX9aECROuO+aLL76omTNnav/+/fL29tYf//hHd38M4KZQAsANnTx5UuvWrdOuXbvUpUsXSdKyZcvUoEEDrVmzRvfff7+io6O1YMECSdKOHTvUvn17hYaGavv27WrRooW2b9+uHj16ePJjAHZt2rTR1KlTJUnNmjXTu+++qy1btuiOO+5w6Ld8+XKZTCa999578vPzU3h4uM6ePauRI0cWGXP69On2f8eff/553XXXXcrNzZWfn5/7PxBQAswA4IaSk5Pl7e2tTp062dtq1Kih5s2bKzk5WZLUo0cPHTt2TBcvXlRCQoKio6MVHR2t7du3Kz8/X7t371Z0dLSHPgHgqE2bNg6P69SpowsXLhTpl5KSojZt2jh8iXfs2PGGY14rf11vTKCsIAGAS7Ru3VrBwcFKSEhwSAASEhK0b98+5efn22cPAE/z8fFxeGwymWS1Wl02pslkkqSbHhNwJxIA3FDLli1VUFCgxMREe9uPP/6olJQUhYeHS7r6H7z/+7//09q1a3X06FF169ZNbdq0kcVi0YIFCxQZGamAgABPfQSgRJo3b67Dhw/LYrHY2/bt2+fBiADXIQHADTVr1kz33HOPRo4cqZ07d+rQoUN69NFHVa9ePd1zzz32ftHR0frHP/6hdu3aqUqVKvLy8lL37t21bNky6v8olx555BFZrVaNGjVKycnJ+ve//6033nhD0v9+5QPlFQkAiuXDDz9URESE7r77bkVFRclms+nTTz91mPbs0aOHCgsLHWr90dHRRdqA8qJatWpav369kpKS1K5dO7344ouaMmWKJLG4D+UetwMGACcsW7ZMjz/+uDIzM1W5cmVPhwOUGNsAAeB3LF26VE2aNFG9evV06NAhTZgwQQ888ABf/ij3SAAA4HekpaVpypQpSktLU506dXT//fdr+vTpng4LuGmUAAAAMCAWAQIAYEAkAAAAGBAJAAAABkQCAACAAZEAAABgQCQAQDnVqFEjvfnmm8Xuv3jxYgUFBd30+5pMJq1Zs+amxwHgWSQAQAlER0dr3Lhxng4DAEqMBABwE5vNpoKCAk+HAQDXRQIAOGn48OFKSEjQW2+9JZPJJJPJpG+//Vbbt2+XyWTSZ599poiICJnNZu3cuVPDhw9XTEyMwxjjxo1zuEGS1WpVfHy8GjdurMqVK6tt27b65JNPnIpr1qxZat26tQICAtSgQQM9/fTTys7OLtJvzZo1atasmfz8/NS3b1999913Ds+vXbtWt912m/z8/NSkSRO99NJLJDJABUQCADjprbfeUlRUlEaOHKnz58/r/PnzatCggf35559/XjNmzFBycrLatGlTrDHj4+O1dOlSzZ8/X0ePHtX48eP16KOPKiEhodhxeXl56e2339bRo0e1ZMkSbd26Vc8995xDn5ycHE2fPl1Lly7Vrl27lJGRoYceesj+/H/+8x8NHTpUzzzzjI4dO6YFCxZo8eLFHH0LVEDcCwBwUmBgoHx9feXv76/Q0NAiz0+bNk133HFHscezWCx69dVX9cUXXygqKkqS1KRJE+3cuVMLFixQjx49ijXOL9ckNGrUSK+88oqefPJJzZ07196en5+vd999V506dZIkLVmyRC1bttSXX36pjh076qWXXtLzzz+vYcOG2eN4+eWX9dxzz2nq1KnF/kwAyj4SAMDFIiMjnep/6tQp5eTkFEka8vLy1L59+2KP88UXXyg+Pl7Hjx9XVlaWCgoKlJubq5ycHPn7+0uSvL291aFDB/trWrRooaCgICUnJ6tjx446dOiQdu3a5fCLv7CwsMg4AMo/EgDAxQICAhwee3l56df33MrPz7f/fa1Ov3HjRtWrV8+hn9lsLtZ7fvvtt7r77rv11FNPafr06QoODtbOnTs1YsQI5eXlFfuLOzs7Wy+99JIGDRpU5Dk/P79ijQGgfCABAErA19dXhYWFxepbq1YtHTlyxKEtKSlJPj4+kqTw8HCZzWalpqYWe7r/1w4cOCCr1aqZM2fKy+vq0p5//vOfRfoVFBRo//796tixoyQpJSVFGRkZatmypSTptttuU0pKim655ZYSxQGg/CABAEqgUaNGSkxM1LfffqsqVaooODj4N/vefvvtev3117V06VJFRUXpo48+0pEjR+zT+1WrVtVf/vIXjR8/XlarVd26dVNmZqZ27dqlatWq2evxv+eWW25Rfn6+3nnnHQ0YMEC7du3S/Pnzi/Tz8fHRmDFj9Pbbb8vb21ujR49W586d7QnBlClTdPfddyssLEz33XefvLy8dOjQIR05ckSvvPJKCf9pASiL2AUAlMBf/vIXVapUSeHh4apVq5ZSU1N/s2/fvn01efJkPffcc+rQoYN+/vlnDR061KHPyy+/rMmTJys+Pl4tW7ZUv379tHHjRjVu3LhY8bRt21azZs3Sa6+9platWmnZsmWKj48v0s/f318TJkzQI488oq5du6pKlSpasWKFQ6wbNmzQpk2b1KFDB3Xu3FmzZ89Ww4YNi/lPBkB5YbL9ujgJAAAqPGYAAAAwIBIAAAAMiAQAAAADIgEAAMCASAAAADAgEgAAAAyIBAAAAAMiAQAAwIBIAAAAMCASAAAADIgEAAAAA/p/5TnX7mOIszcAAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#6E4555;\n",
        "           font-size:80%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: left\">\n",
        "\n",
        "<h2 style=\"padding: 10px;\n",
        "              color:#F0EDEE;\">\n",
        "              5-3- Random Forest\n",
        "</h2>\n",
        "<a class=\"anchor\" id=\"rf\"></a>\n",
        "</div>"
      ],
      "metadata": {
        "id": "oxZegh8PkwpZ"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Random Forest models have several hyperparameters that can significantly impact their performance, such as the number of trees (n_estimators), the maximum depth of the trees (max_depth), and the number of features to consider when looking for the best split (max_features).\n",
        "\n",
        "Here's how you can perform training a multiclass Random Forest classifier with cross-validation and using GridSearchCV to optimize hyperparameters with scikit-learn:\n",
        "\n",
        "1. Define the parameter grid: Specify the parameters and their respective values you want to search over.\n",
        "2. Instantiate the GridSearchCV object: Include the model, parameter grid, and cross-validation strategy.\n",
        "3. Fit the GridSearchCV object: Train the model and find the best parameters.\n",
        "4. Evaluate the model: Generate classification reports and confusion matrices."
      ],
      "metadata": {
        "id": "RzMTOC9MkwpZ"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Define the parameter grid\n",
        "param_grid = {\n",
        "    'n_estimators': [100, 200, 300],\n",
        "    'max_depth': [None, 10, 20, 30],\n",
        "    'max_features': ['auto', 'sqrt', 'log2']\n",
        "}\n",
        "\n",
        "# Define the model\n",
        "rf = RandomForestClassifier(random_state=42)\n",
        "\n",
        "# Define the cross-validation strategy\n",
        "cv = KFold(n_splits=5, shuffle=True, random_state=42)\n",
        "\n",
        "# Define the scoring metrics\n",
        "scoring = {\n",
        "    'accuracy': 'accuracy',\n",
        "    'precision_macro': 'precision_macro',\n",
        "    'recall_macro': 'recall_macro',\n",
        "    'f1_macro': 'f1_macro'\n",
        "}\n",
        "\n",
        "# Instantiate the GridSearchCV object\n",
        "grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=cv, n_jobs=-1, scoring=scoring, refit='accuracy', verbose=0)\n",
        "\n",
        "# Fit the GridSearchCV object\n",
        "grid_search.fit(X_train, y_train_encoded)\n",
        "\n",
        "# Get the best estimator\n",
        "best_model = grid_search.best_estimator_"
      ],
      "metadata": {
        "_kg_hide-output": true,
        "execution": {
          "iopub.status.busy": "2024-06-26T05:51:06.059352Z",
          "iopub.execute_input": "2024-06-26T05:51:06.059846Z",
          "iopub.status.idle": "2024-06-26T05:52:12.148646Z",
          "shell.execute_reply.started": "2024-06-26T05:51:06.059801Z",
          "shell.execute_reply": "2024-06-26T05:52:12.147448Z"
        },
        "trusted": true,
        "id": "cEgyxhX0kwpZ"
      },
      "execution_count": 41,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Explanation:** <br>\n",
        "\n",
        "1. Parameter Grid (param_grid):\n",
        "\n",
        " * Defines the range of parameters for the RandomForestClassifier to search over, including n_estimators, max_depth, and max_features.\n",
        "2. Cross-Validation Strategy (cv):\n",
        "\n",
        " * KFold is used here to split the data into 5 folds with shuffling and a fixed random state for reproducibility.\n",
        "3. Scoring Metrics:\n",
        "\n",
        " * The scoring dictionary includes 'accuracy', 'precision_macro', 'recall_macro', and 'f1_macro' as the metrics to be evaluated.\n",
        "4. GridSearchCV:\n",
        "\n",
        " * estimator: The base model (Random Forest in this case).\n",
        " * param_grid: The parameter grid defined earlier.\n",
        " * cv: Cross-validation strategy.\n",
        " * n_jobs: Number of jobs to run in parallel. -1 uses all available processors.\n",
        " * scoring: The scoring metric to evaluate the predictions on the test set. Here, 'accuracy' is used for refitting, but you can choose another metric if preferred.\n",
        "5. Fitting the GridSearchCV:\n",
        "\n",
        " * The fit method runs the grid search and fits the model with the best parameters found.\n",
        "6. Best Estimator:\n",
        "\n",
        " * best_model retrieves the best model found by GridSearchCV."
      ],
      "metadata": {
        "id": "dRJdifPrkwpa"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "y_pred = best_model.predict(X_test)\n",
        "\n",
        "test_accuracy = accuracy_score(y_test_encoded, y_pred)\n",
        "test_precision = precision_score(y_test_encoded, y_pred)\n",
        "test_recall = recall_score(y_test_encoded, y_pred)\n",
        "test_f1 = f1_score(y_test_encoded, y_pred)\n",
        "\n",
        "print(f\"Test Accuracy: {test_accuracy:.4f}\")\n",
        "print(f\"Test Precision (macro): {test_precision:.4f}\")\n",
        "print(f\"Test Recall (macro): {test_recall:.4f}\")\n",
        "print(f\"Test F1 Score (macro): {test_f1:.4f}\")"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:52:12.150334Z",
          "iopub.execute_input": "2024-06-26T05:52:12.150905Z",
          "iopub.status.idle": "2024-06-26T05:52:12.198648Z",
          "shell.execute_reply.started": "2024-06-26T05:52:12.15086Z",
          "shell.execute_reply": "2024-06-26T05:52:12.197443Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "QD8t-y5Mkwpa",
        "outputId": "6c8ce77e-c14c-4633-9cd0-224fe260403a"
      },
      "execution_count": 42,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Test Accuracy: 0.5218\n",
            "Test Precision (macro): 0.5558\n",
            "Test Recall (macro): 0.5571\n",
            "Test F1 Score (macro): 0.5565\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Generate the classification report\n",
        "report = classification_report(y_test_encoded, y_pred)\n",
        "print(\"Classification Report:\\n\", report)\n",
        "\n",
        "# Generate the confusion matrix\n",
        "conf_matrix = confusion_matrix(y_test_encoded, y_pred)\n",
        "print(\"Confusion Matrix:\\n\", conf_matrix)"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:52:12.200076Z",
          "iopub.execute_input": "2024-06-26T05:52:12.200608Z",
          "iopub.status.idle": "2024-06-26T05:52:12.221641Z",
          "shell.execute_reply.started": "2024-06-26T05:52:12.200569Z",
          "shell.execute_reply": "2024-06-26T05:52:12.220223Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "mFF94xMwkwpa",
        "outputId": "1fd44a45-50f5-4564-ce88-4e5ef3158fc2"
      },
      "execution_count": 43,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Classification Report:\n",
            "               precision    recall  f1-score   support\n",
            "\n",
            "           0       0.48      0.48      0.48       360\n",
            "           1       0.56      0.56      0.56       420\n",
            "\n",
            "    accuracy                           0.52       780\n",
            "   macro avg       0.52      0.52      0.52       780\n",
            "weighted avg       0.52      0.52      0.52       780\n",
            "\n",
            "Confusion Matrix:\n",
            " [[173 187]\n",
            " [186 234]]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "sns.heatmap(conf_matrix, annot=True, square=True, fmt='0.0f',\n",
        "            xticklabels=y_test.unique(),\n",
        "            yticklabels=y_test.unique())\n",
        "plt.xlabel('true label')\n",
        "plt.ylabel('predicted label')"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:52:12.223331Z",
          "iopub.execute_input": "2024-06-26T05:52:12.223798Z",
          "iopub.status.idle": "2024-06-26T05:52:12.556191Z",
          "shell.execute_reply.started": "2024-06-26T05:52:12.223756Z",
          "shell.execute_reply": "2024-06-26T05:52:12.554851Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 466
        },
        "id": "xNyl_w34kwpb",
        "outputId": "bab3cb6b-fbf1-4ef7-d41c-6f9032f3185d"
      },
      "execution_count": 44,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Text(77.92222222222227, 0.5, 'predicted label')"
            ]
          },
          "metadata": {},
          "execution_count": 44
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "<div style=\"display:fill;\n",
        "           border-radius:5px;\n",
        "           background-color:#6E4555;\n",
        "           font-size:80%;\n",
        "           font-family:Verdana;\n",
        "           letter-spacing:0.5px;\n",
        "           text-align: left\">\n",
        "\n",
        "<h2 style=\"padding: 10px;\n",
        "              color:#F0EDEE;\">\n",
        "              5-4- XGBoost\n",
        "</h2>\n",
        "<a class=\"anchor\" id=\"xgboost\"></a>\n",
        "</div>"
      ],
      "metadata": {
        "id": "Zhf6I5u3kwpb"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "XGBoost is a powerful boosting algorithm that has several hyperparameters that can be fine-tuned to achieve better performance.\n",
        "\n",
        "1. Define the parameter grid: Specify the parameters and their respective values you want to search over.\n",
        "\n",
        "2. Instantiate the GridSearchCV object: Include the model, parameter grid, and cross-validation strategy.\n",
        "\n",
        "3. Fit the GridSearchCV object: Train the model and find the best parameters.\n",
        "\n",
        "4. Evaluate the model: Generate classification reports and confusion matrices.\n"
      ],
      "metadata": {
        "id": "1jHgy234kwpb"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Define the parameter grid\n",
        "param_grid = {\n",
        "    'n_estimators': [100, 200, 300],\n",
        "    'max_depth': [3, 6, 9],\n",
        "    'learning_rate': [0.01, 0.1, 0.2],\n",
        "    'subsample': [0.6, 0.8, 1.0],\n",
        "    'colsample_bytree': [0.6, 0.8, 1.0]\n",
        "}\n",
        "\n",
        "# Define the model\n",
        "xgb_model = xgb.XGBClassifier(objective='multi:softmax', num_class=2, use_label_encoder=False, eval_metric='mlogloss', random_state=42)\n",
        "\n",
        "# Define the cross-validation strategy\n",
        "cv = KFold(n_splits=5, shuffle=True, random_state=42)\n",
        "\n",
        "# Define the scoring metrics\n",
        "scoring = {\n",
        "    'accuracy': 'accuracy',\n",
        "    'precision_macro': 'precision_macro',\n",
        "    'recall_macro': 'recall_macro',\n",
        "    'f1_macro': 'f1_macro'\n",
        "}\n",
        "\n",
        "# Instantiate the GridSearchCV object\n",
        "grid_search = GridSearchCV(estimator=xgb_model, param_grid=param_grid, cv=cv, n_jobs=-1, scoring=scoring, refit='accuracy', verbose=1)\n",
        "\n",
        "# Fit the GridSearchCV object\n",
        "grid_search.fit(X_train, y_train_encoded)\n",
        "\n",
        "# Get the best estimator\n",
        "best_model = grid_search.best_estimator_"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:52:12.557925Z",
          "iopub.execute_input": "2024-06-26T05:52:12.558314Z",
          "iopub.status.idle": "2024-06-26T05:55:55.341607Z",
          "shell.execute_reply.started": "2024-06-26T05:52:12.55828Z",
          "shell.execute_reply": "2024-06-26T05:55:55.340528Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "wKuFWREukwpc",
        "outputId": "c89f5cd4-1026-4087-b32d-1e08c3a8f66a"
      },
      "execution_count": 45,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Fitting 5 folds for each of 243 candidates, totalling 1215 fits\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Explanation:** <br>\n",
        "1. Parameter Grid (param_grid):\n",
        "\n",
        " * Defines the range of parameters for the XGBClassifier to search over, including n_estimators, max_depth, learning_rate, subsample, and colsample_bytree.\n",
        "2. Cross-Validation Strategy (cv):\n",
        "\n",
        " * KFold is used here to split the data into 5 folds with shuffling and a fixed random state for reproducibility.\n",
        "3. Scoring Metrics:\n",
        "\n",
        " * The scoring dictionary includes 'accuracy', 'precision_macro', 'recall_macro', and 'f1_macro' as the metrics to be evaluated.\n",
        "4. GridSearchCV:\n",
        "\n",
        " * estimator: The base model (XGBoost in this case).\n",
        " * param_grid: The parameter grid defined earlier.\n",
        " * cv: Cross-validation strategy.\n",
        " * n_jobs: Number of jobs to run in parallel. -1 uses all available processors.\n",
        " * scoring: The scoring metric to evaluate the predictions on the test set. Here, 'accuracy' is used for refitting, but you can choose another metric if preferred.\n",
        "5. Fitting the GridSearchCV:\n",
        "\n",
        " * The fit method runs the grid search and fits the model with the best parameters found.\n",
        "6. Best Estimator:\n",
        "\n",
        " * best_model retrieves the best model found by GridSearchCV."
      ],
      "metadata": {
        "id": "XfECHeFdkwpc"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "y_pred = best_model.predict(X_test)\n",
        "\n",
        "test_accuracy = accuracy_score(y_test_encoded, y_pred)\n",
        "test_precision = precision_score(y_test_encoded, y_pred)\n",
        "test_recall = recall_score(y_test_encoded, y_pred)\n",
        "test_f1 = f1_score(y_test_encoded, y_pred)\n",
        "\n",
        "print(f\"Test Accuracy: {test_accuracy:.4f}\")\n",
        "print(f\"Test Precision (macro): {test_precision:.4f}\")\n",
        "print(f\"Test Recall (macro): {test_recall:.4f}\")\n",
        "print(f\"Test F1 Score (macro): {test_f1:.4f}\")"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:55:55.346793Z",
          "iopub.execute_input": "2024-06-26T05:55:55.347563Z",
          "iopub.status.idle": "2024-06-26T05:55:55.376364Z",
          "shell.execute_reply.started": "2024-06-26T05:55:55.347517Z",
          "shell.execute_reply": "2024-06-26T05:55:55.375088Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "gFNu1aIzkwpd",
        "outputId": "869612e4-da12-4547-ac5f-f729b091be24"
      },
      "execution_count": 46,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Test Accuracy: 0.5282\n",
            "Test Precision (macro): 0.5644\n",
            "Test Recall (macro): 0.5429\n",
            "Test F1 Score (macro): 0.5534\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Generate the classification report\n",
        "report = classification_report(y_test_encoded, y_pred)\n",
        "print(\"Classification Report:\\n\", report)\n",
        "\n",
        "# Generate the confusion matrix\n",
        "conf_matrix = confusion_matrix(y_test_encoded, y_pred)\n",
        "print(\"Confusion Matrix:\\n\", conf_matrix)"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:55:55.379306Z",
          "iopub.execute_input": "2024-06-26T05:55:55.380293Z",
          "iopub.status.idle": "2024-06-26T05:55:55.399795Z",
          "shell.execute_reply.started": "2024-06-26T05:55:55.380253Z",
          "shell.execute_reply": "2024-06-26T05:55:55.398228Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "uFyAjZBgkwpd",
        "outputId": "cea51eaf-ea5e-423b-be65-4d9590d81eff"
      },
      "execution_count": 47,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Classification Report:\n",
            "               precision    recall  f1-score   support\n",
            "\n",
            "           0       0.49      0.51      0.50       360\n",
            "           1       0.56      0.54      0.55       420\n",
            "\n",
            "    accuracy                           0.53       780\n",
            "   macro avg       0.53      0.53      0.53       780\n",
            "weighted avg       0.53      0.53      0.53       780\n",
            "\n",
            "Confusion Matrix:\n",
            " [[184 176]\n",
            " [192 228]]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "sns.heatmap(conf_matrix, annot=True, square=True, fmt='0.0f',\n",
        "            xticklabels=y_test.unique(),\n",
        "            yticklabels=y_test.unique())\n",
        "plt.xlabel('true label')\n",
        "plt.ylabel('predicted label')"
      ],
      "metadata": {
        "execution": {
          "iopub.status.busy": "2024-06-26T05:55:55.401395Z",
          "iopub.execute_input": "2024-06-26T05:55:55.402259Z",
          "iopub.status.idle": "2024-06-26T05:55:55.735419Z",
          "shell.execute_reply.started": "2024-06-26T05:55:55.402216Z",
          "shell.execute_reply": "2024-06-26T05:55:55.734134Z"
        },
        "trusted": true,
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 466
        },
        "id": "3sDSX58Gkwpe",
        "outputId": "af8b9835-00cc-4803-a553-4997833984a4"
      },
      "execution_count": 48,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Text(77.92222222222227, 0.5, 'predicted label')"
            ]
          },
          "metadata": {},
          "execution_count": 48
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# TODO; Ensemble, Coming Soon :)))))"
      ],
      "metadata": {
        "id": "xiePm86qeXpi",
        "execution": {
          "iopub.status.busy": "2024-06-26T05:55:55.73702Z",
          "iopub.execute_input": "2024-06-26T05:55:55.737424Z",
          "iopub.status.idle": "2024-06-26T05:55:55.742353Z",
          "shell.execute_reply.started": "2024-06-26T05:55:55.73739Z",
          "shell.execute_reply": "2024-06-26T05:55:55.741236Z"
        },
        "trusted": true
      },
      "execution_count": 49,
      "outputs": []
    }
  ]
}